はじめまして。
>変数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 分割コンパイルとリンク」を参照してください。