可能重复:
how does an optimizing c++ compiler reuse stack slot of a function?
c ++编译器是否有办法确定函数中每个局部变量的生命周期结束的时间,以便使用堆栈内存进行优化,或者它们只是等于函数执行的生命周期?
答案 0 :(得分:3)
在函数返回之前,无法回收堆栈变量的内存。这是因为它们是特定调用的堆栈帧的一部分。返回指针位于它们下方,并且调用者的帧位于它们上方。显然,返回指针直到函数返回后才能被释放,因此堆栈变量卡在摇滚和硬地之间,可以这么说,直到返回之后它们的内存仍然无法使用。
答案 1 :(得分:2)
大多数编译器一次性为堆栈中的所有变量分配内存。例如:
void f() {
int n = 0; // lifetime of n begins here
{
int x = 0; // lifetime of x begins here
} // lifetime of x ends here
} // lifetime of n end here
会在函数入口上为两个整数分配一次内存。但是,这是一个实现细节,对程序员来说是不可见的,并且两个变量n和x的生命周期不同。