私は次のような簡単なコードを持っています:
#include<stdio.h>
int glob;
int main(void)
{
int a;
printf("&a is : %p \n", &a);
printf("glob is : %p \n", &glob);
return 0;
}
上記のプログラムの出力は次のとおりです。
&a is : 0x7fff70de91ec
glob is : 0x6008f4
2 回目の実行:
&a is : 0x7fff38c4c7ac
glob is : 0x6008f4
仮想アドレスと物理アドレスについて勉強しています。次の質問があります。
- 変数「a」の出力アドレス(物理/仮想)はどれ?
- 仮想の場合、同じプログラムの実行ごとにどのように変化しますか? 私が理解しているように、コンパイラはコンパイル時に変数に仮想アドレスを提供しますか?
- プログラムの実行ごとにグローバル変数のアドレスが一定なのはなぜですか?
Linux でこのプログラムを実行した場合: 2.6.18-308.el5 x86_64 GNU/Linux
使用してコンパイル: gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-52)