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

时间:2014-08-19 14:23:39

标签: c++ c stack

这个问题与这个问题密切相关:Why is the address of a local variable identical for different executions?。我理解这个问题的答案,但是如果我在有趣的调用之间在堆栈上添加一些内容,那么地址仍然是相同的:

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;
}

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

我的直觉说这是一种编译器优化,更具体地说,p的内存在实际定义之前被“分配”,这进一步得出内存分配的结论(也许我应该说保留,不分配) )对于函数开头的局部变量。

1 个答案:

答案 0 :(得分:6)

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