资源释放问题
加入我们定义一个简单的程序
int main()
{
int a = 0;
int b = 1;
return 0;
}
那么在return 0时,编译器是先释放a的资源还是b的资源呢?
这与编译器的具体实现有关吗?
假如是:
int main()
{
int a= 0;
int* p=&a;
return 0;
}
呢?一般删除指针,指的是删除指针指向的对象。那么在return 0,时,删除这个具体指针与删除a二者谁在前,谁在后呢?
[解决办法]
运行空间是在堆栈内, 运行时实行压栈动作, 释放时出栈动作, 所以顺序是由后往前.
[解决办法]
局部变量存放在栈中,栈是后进先出。
如果是开辟的内存在堆,顺序是随意的。 若不释放,程序结束时可能由OS回收。
到最后也就不知道是什么样子了 。
[解决办法]
对象不是new出来的,就是分配在堆栈上。return的时候,是按照代码逆序的方式,删除的。
[解决办法]
没有删除不删除一说,
return之后随着ebp值的修改,内层的函数栈帧就不复存在了,是一整片内存区域被系统回收了,所以是同时。