关于C语言的指针与虚拟地址,物理地址的关系有关问题

关于C语言的指针与虚拟地址,物理地址的关系问题!

#include <stdio.h>

int main(){
int hoge=20;
int* hp=&hoge;
printf("&hoge..%p\n",hp);
}


测试环境 操作系统:windows7;处理器: intel corei5;
编译器分别为Visual C++ 2010和GCC
结果是GCC编译的程序,每次运行都输出同一个指针值;VC编译的程序,每次运行都是随机输出一个指针值。
看了很多相关的文章,分段,分页之类的,大致是说,C语言的指针在现代系统上貌似使用的是虚拟地址。正如GCC编译器出的程序所表现的一致。但是为什么VC编译器却又不同呢?VC编译器使用的指针和GCC编译器所使用的指针方式不同吗?VC上的指针是物理地址而GCC使用虚拟地址?
关于C语言的指针与虚拟地址,物理地址的关系有关问题
请大家不吝赐教,再次感谢。。。
C 指针 编译器 GCC VC

------解决方案--------------------
linux下gcc编译,运行产生的是随机值。

[root@SD3 Test]# ./a.out 
&hoge..0xbf953b38
[root@SD3 Test]# ./a.out 
&hoge..0xbf866b98
[root@SD3 Test]# gcc csdntest.cpp 
[root@SD3 Test]# ./a.out 
&hoge..0xbfd2f818
[root@SD3 Test]# ./a.out 
&hoge..0xbfa56cb8
[root@SD3 Test]# ./a.out 
&hoge..0xbfabc8e8
[root@SD3 Test]# ./a.out 
&hoge..0xbfb35ff8
[root@SD3 Test]# ./a.out 
&hoge..0xbfc0a778
[root@SD3 Test]# ./a.out 
&hoge..0xbfe3bc68
[root@SD3 Test]# ./a.out 
&hoge..0xbfbf9348
[root@SD3 Test]# ./a.out 
&hoge..0xbfdb2d78

------解决方案--------------------
vc程序里面的指针肯定不是物理地址,至于vc输出的hoge地址随即,认为是编译器对
int hoge=20;之类语句的解释方式不同,反正不关心,也不知道关于C语言的指针与虚拟地址,物理地址的关系有关问题
------解决方案--------------------
p void *; print as a pointer (implementation-dependent representation).

------解决方案--------------------
可能是windows默认开了栈随机化