Ale*_*Dan 1 c++ memory memory-address
代码1:
int main(){
int a=1;
int b=2;
cout << "&a: "<<&a << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出1:
&a: 0x22ff48
Run Code Online (Sandbox Code Playgroud)
代码2:
int main(){
int a=1;
int b=2;
cout << "&a: "<<&a << endl;
cout << "&b: "<<&b << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出2:
&a: 0x22ff4c
&b: 0x22ff48
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么a当我打印出varibale的地址时,varibale的地址发生了变化b?
当您根本不使用b时,编译器可能完全删除它,因此它不占用任何空间.
当您获取地址时b,会强制编译器为其分配空间.
无论如何,操作系统可以在下次自由地将可执行映像加载到另一个(虚拟)基地址.
无论如何,你所观察到的是未定义的.关键是,即使没有变量被优化掉,并且程序没有重新编译,每次都可能产生不同的结果.
这可能是实现定义的,如果算上OS的一部分执行