解释代码的输出

ShR*_*NsH 1 c++ global-variables output

我最近被要求考虑以下代码的输出:

#include <iostream>
int gvar;
int main (void)
{
     cout << &gvar << endl;
     while (true);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译此代码并生成可执行文件.如果这个可执行文件在run 2中并行运行.会打印什么

我的回答是它会打印2个不同的地址.但在跑步时,我发现两个终端都打印了相同的地址.

有人可以解释为什么会这样.我知道这可能是由于虚拟内存,但我无法将各个部分放在一起.

unw*_*ind 5

很明显,由于虚拟内存,是的.

像这样的代码看到的地址是虚拟的.由于每个进程都有自己的虚拟到物理映射表,因此虚拟地址在每个进程中不必是唯一的.