我最近被要求考虑以下代码的输出:
#include <iostream>
int gvar;
int main (void)
{
cout << &gvar << endl;
while (true);
return 0;
}
编译此代码并生成可执行文件。如果这个可执行文件在run 2中并行运行。什么会印刷。
我的回复是它会打印2个不同的地址。但在跑步时,我发现两个终端都打印了相同的地址。
有人可以解释为什么会这样。我知道这可能是由于虚拟内存造成的,但我无法将这些内容放在一起。
答案 0 :(得分:5)
非常明显是由于虚拟内存,是的。
像这样的代码看到的地址是虚拟的。由于每个进程都有自己的虚拟到物理映射表,因此虚拟地址在每个进程中都不一定是唯一的。