为什么本地变量的地址对于不同的执行是相同的?

Sub*_*esh 1 c++

int fun(int x);

int main()
{
    fun(10);
    fun(11);   
    return 0;
}

int fun(int x)
{
    int loc;//local variable
    cout<<&loc;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

0xbfb8e610 
0xbfb8e610
Run Code Online (Sandbox Code Playgroud)

这里loc是一个局部变量,在第一次执行函数后超出范围f(10),然后再次分配给下一次执行fun(11).因此loc,根据我的理解,变量的地址必须不同.那么为什么&loc执行地址相同?

Dav*_*rtz 7

每次调用都fun需要自己的位置来存储变量.但是一旦函数返回,变量就不再存在.地址无法重复使用是没有理由的.它不一定是,但没有理由不能.

在典型的实现中,堆栈空间用于保存在调用函数时从函数返回所需的信息及其局部变量.当函数返回时,局部变量将从堆栈中删除,并返回返回信息,使堆栈返回调用函数时的位置.由于两个函数调用是相同的,因此它们在两种情况下都与堆栈相同,使得局部变量具有相同的地址.这是一位经验丰富的程序员所期望的,但不依赖于此.