【发布时间】:2013-02-08 07:51:21
【问题描述】:
int fun(int x);
int main()
{
fun(10);
fun(11);
return 0;
}
int fun(int x)
{
int loc;//local variable
cout<<&loc;
return 0;
}
输出是
0xbfb8e610
0xbfb8e610
这里的 loc 是一个局部变量,它在第一次执行函数 f(10) 后超出范围,然后再次分配给下一次执行 fun(11)。因此,根据我的理解,loc 变量的地址必须不同。那为什么两个执行的地址&loc是一样的呢?
【问题讨论】:
-
“所以地址必须不同。”是什么让你这么认为?
-
因为它们被一个接一个地调用,所以它们可以使用堆栈上的相同空间。
-
嗯,还有什么变量? :) 对
fun的两次调用之间没有任何内容。如果您从堆栈中取出某个东西,然后立即将其放回原处,它会在同一个地方。 -
@SubiSuresh 内存位置是虚拟的。 '你认为你现在呼吸的是空气吗?'
-
@SubiSuresh:同一内存不能被另一个进程使用,因为操作系统不允许。另一个进程可以使用相同的地址,但它会访问完全不同的内存。操作系统可以为进程创建任意数量的不同或部分重叠的内存空间,并且可以根据需要将这些空间的位和部分映射到物理内存的页面中。如果你真的想吃红色药丸,请阅读
fork是如何使用写时复制实现的。
标签: c++