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

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

Jer*_*fin 7

当您根本不使用b时,编译器可能完全删除它,因此它不占用任何空间.

当您获取地址时b,会强制编译器为其分配空间.

  • 此外,它可能没有消除它,但只将其分配给寄存器,因为它的地址永远不会被占用. (5认同)

seh*_*ehe 5

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

无论如何,你所观察到的是未定义的.关键是,即使没有变量被优化掉,并且程序没有重新编译,每次都可能产生不同的结果.

可能是实现定义的,如果算上OS的一部分执行