我有简单的代码如下:
#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
第二次运行:
&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)