这个问题与这个问题密切相关: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的内存在实际定义之前被“分配”,这进一步得出内存分配的结论(也许我应该说保留,不分配) )对于函数开头的局部变量。
答案 0 :(得分:6)
因为呼叫堆栈框架相同。即使在第一次调用p
之前,变量fun
也已在堆栈上分配。除此之外,编译器优化发挥其作用。你不应该依赖这样的统计数据(它们很少有用)。