K.Maebashi's BBS

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

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


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


[1941] Re:変数とは何か
返信


投稿者:(ぱ)こと管理人
2016/06/16 04:05:24

Link:
はじめまして。

>変数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 分割コンパイルとリンク」を参照してください。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]