后续函数调用的相同内存地址

Pau*_*l92 3 c c++ stack

这个问题与这个问题密切相关:为什么本地变量的地址对于不同的执行是相同的?.我理解这个问题的答案,但是如果我在有趣的调用之间在堆栈上添加了一些东西,那么地址仍然是相同的:

int fun(int x);

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

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

我期望第二次调用fun报告的变量地址大于前一个4字节,因为我在堆栈上引入了变量p.

我的直觉说这是一种编译器优化,更具体地说,p的内存在实际定义之前被"分配",这进一步得出结论:内存被分配(可能我应该说保留,未分配)用于本地函数开头的变量.

Aja*_*jay 6

因为调用堆栈帧是相同的.p即使在第一次调用之前,变量也在堆栈上分配fun.除此之外,编译器优化发挥其作用.你不应该依赖这样的统计数据(它们很少有用).