代码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
的地址发生了变化?
答案 0 :(得分:7)
如果你根本没有使用b
,编译器可能会完全删除它,所以它没有占用任何空间。
当您使用b
的地址时,会强制编译器为其分配空间。
答案 1 :(得分:5)
无论如何,操作系统可以在下次自由加载另一个(虚拟)基地址的可执行映像。
无论如何,您所观察到的是 undefined 。关键是,甚至如果没有变量被优化掉,并且程序没有重新编译,每次都可能产生不同的结果。
如果您将操作系统视为实现的一部分 ,那么 可能是实现定义的