K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1941] Re:変数とは何か
投稿者:(ぱ)こと管理人
2016/06/16 04:05:24

はじめまして。 >変数hogeのアドレス(&hoge)は"0xbfbfd9e4"。 >そこに数値5をint型で配置する。 >これは分かるのですが、変数hoge自体は、誰がどこで管理しているのでしょうか。 > >図表では、0xbfbfd9e4アドレスからの始まりに5が格納されており、これは分かります。 >しかし、同時に、"hoge"もあります。この辺りで混乱しております。 誤解を招いたなら申し訳ないですが、p.034のFig.1-1において、 図の中に「hoge」が書いてあるのは、読者にとってわかりやすくするためで、 プログラムの実行時に「hoge」という名前がどこかに保持されているわけではありません。 Cの場合、コンパイル時にデバッグオプションを付けたりしない限り、 たいていは、ローカル変数の変数名(この場合hoge)は、コンパイル後の オブジェクトファイルに残ってすらいません。 ではどのように変数hogeを参照しているのかといえば、素朴な実装では、スタック内の、 現在実行中の関数の使用領域(p.095のFig.2-5において、「func()から見える領域」と 書いてある範囲。スタックフレームと言います)内の位置が、コンパイル後の 機械語コードに埋め込まれていて、それを使用して参照します。 こちらの図↓で言えば、BPからの相対位置でアクセスします。 http://www.c-tipsref.com/words/stackframe.html グローバル変数やstatic変数は、リンクの時点でアドレスが決まります。 「2-4-2 分割コンパイルとリンク」を参照してください。
[この投稿を含むスレッドを表示] [この投稿を削除]