这个问题与这个问题密切相关:为什么本地变量的地址对于不同的执行是相同的?.我理解这个问题的答案,但是如果我在有趣的调用之间在堆栈上添加了一些东西,那么地址仍然是相同的:
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的内存在实际定义之前被"分配",这进一步得出结论:内存被分配(可能我应该说保留,未分配)用于本地函数开头的变量.