有一个程序是这样的
#include<stdio.h>
int main()
{
int n;
n = 0;
printf("%x:%d\n",n,&n);
return 0;
}
这个代码在win xp 下用gcc 和vc6.0编译后,每次打印的地址是一样的。而在Linux kernal 2.6+gcc/icc编译,每次打印的地址是不一样的,而有人跟我说在win7 中情况如同Linux一样。向大牛求解?
我的想法:
1、&取地址符在Linux中取的是物理地址而非虚拟地址(这个不太可能)
2、系统堆栈从虚拟地址的最高处开始生长。main作为第一个被调用的函数,栈的地址应该是固定的。但这解释不通Linux中的现象
大牛们来讨论一下啊