如果有以下功能:
int func1() {
int status = func2();
// Do something with status.
return status;
}
在此函数的过程中,int类型的变量状态被分配内存,在函数过程中使用变量,然后从func1返回。
我的问题是,什么时候为这个原语收集了内存垃圾,还是它永远留在内存中?
答案 0 :(得分:2)
在您的示例中, status 变量在堆栈中分配,并在 func1 返回后立即释放。
答案 1 :(得分:2)
从堆栈中分配内存。调用该函数时,堆栈指针将增加到足以保存函数参数,本地值,返回值(可能)和返回地址。当函数返回时,堆栈指针的减少量完全相同,控制将在返回地址处继续。
换句话说,status
声明会导致堆栈指针增加额外sizeof(int)
个字节(如果编译器为了对齐而决定可能更多)。