次の声明は何を意味していますか?ローカルおよび動的に割り当てられた変数は、ソースファイルがなぜコンパイラはコンパイル時にローカル変数のアドレスを知りませんか?
をコンパイル時にコンパイラによって知られていないアドレスは、私は、ローカル変数はコンパイル時にアドレスが割り当てられていることを考えるために使用されるが、このアドレスはできてい
範囲外になると変更され、関数呼び出し中に再びスコープに入ります。しかし、上記の文は、ローカル変数のaddresessは、コンパイラによって知られていないと述べています。次に、ローカル変数はどのように割り当てられますか?コンパイル時にグローバル変数のアドレスを知ることができるのはなぜですか?
また、ローカル変数やその他がどのように割り当てられているかを読む良いリンクを提供してください。
ありがとうございます!
OSによってプログラムがロードされ、MMUに仮想メモリマッピングが設定されるまで、アドレスがわからないことがあります。コンパイラはレイアウトを知っています。レイアウトは物事が現れる順序ですが、すべてが基本アドレスから測定されます。静的な記憶期間では、バイナリのロードアドレスから測定されます。自動保存期間は、スタックポインタから測定されます。動的記憶域には実行時に決定されるアドレスがありますが、メンバーは動的アドレスからのオフセットで格納されます。 –
@Ben:それは全く別の問題です。 –