【发布时间】:2015-05-05 14:16:59
【问题描述】:
我最近被要求考虑以下代码的输出:
#include <iostream>
int gvar;
int main (void)
{
cout << &gvar << endl;
while (true);
return 0;
}
编译此代码并生成可执行文件。如果此可执行文件并行运行 2 个终端。它会打印什么。
我的回答是它会打印 2 个不同的地址。但是在运行时,我发现两个终端都打印了相同的地址。
有人能解释一下为什么会这样吗?我知道这可能是由于虚拟内存造成的,但我无法将各个部分组合在一起。
【问题讨论】:
-
我认为这与编译器的关系比任何语言都多。
-
很可能您获得的内存地址位于可执行文件的堆栈空间中,如果是这种情况,那么它应该是相同的地址。
-
@NathanOliver 没关系,但没有那个变量不应该在堆栈上。毕竟这是一个全局变量。
-
实际上它可能会或可能不会打印相同的地址。
-
@unwind 我不是指实际的堆栈。当时想不出进程内存空间的说法。
标签: c++ global-variables output