为什么访问变量的地址会改变另一个变量的地址?

时间:2012-12-07 21:15:55

标签: c++ memory memory-address

代码1:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
}

输出1:

&a: 0x22ff48

代码2:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
   cout << "&b: "<<&b << endl;
}

输出2:

&a: 0x22ff4c
&b: 0x22ff48


因此,当我打印出varibale a的地址时,我的问题是为什么变量b的地址发生了变化?

2 个答案:

答案 0 :(得分:7)

如果你根本没有使用b,编译器可能会完全删除它,所以它没有占用任何空间。

当您使用b的地址时,会强制编译器为其分配空间。

答案 1 :(得分:5)

无论如何,操作系统可以在下次自由加载另一个(虚拟)基地址的可执行映像。

无论如何,您所观察到的是 undefined 。关键是,甚至如果没有变量被优化掉,并且程序没有重新编译,每次都可能产生不同的结果。

如果您将操作系统视为实现的一部分

,那么 可能是实现定义的