请问堆栈变量如何释放

zll_lover 2010-09-19 03:12:10
我反编译过,看到方法里面的局部变量只有
void test(int a){
int c =a;
}
int main() {
int a=4;
test(a);
return 0;
}


15: int a=4;
00401078 mov dword ptr [ebp-4],4
16: test(a);
0040107F mov eax,dword ptr [ebp-4]
00401082 push eax
00401083 call @ILT+5(_test) (0040100a)
00401088 add esp,4


请问局部变量a是如何释放的,是通过红线这步吗?但这布并没有释放数据啊,只是将栈顶压了回来,谢谢
...全文
260 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zll_lover 2010-09-19
  • 打赏
  • 举报
回复
好的结贴,感谢楼上几位我会结贴
可http://topic.csdn.net/u/20100918/16/9ada0f8c-13b6-41e2-aa47-7534d8ed8e7e.html
这个问题我连续提问了两个帖子,谁能帮助一下,谢谢啦
乐CC 2010-09-19
  • 打赏
  • 举报
回复
综合1234楼就差不多全了,调整栈顶指针,意思就是释放的地址已经没有使用,后面再申请时就会重新使用覆盖掉,而不会清空内存,和windows下删除文件差不多.
pengzhixi 2010-09-19
  • 打赏
  • 举报
回复
调整栈指针即可。
xingzhe2001 2010-09-19
  • 打赏
  • 举报
回复
栈顶压回来,原来的内存就可以随便被后面的程序用啦,这不就是释放么。不过除了这步,如果是c++的复杂对象,前边还会调用析构函数
Bizet 2010-09-19
  • 打赏
  • 举报
回复
所以栈空间不初始化就是随机值
冻结 2010-09-19
  • 打赏
  • 举报
回复
栈的释放就是改栈顶指针.
指针一挪。
内存就算释放了。

所以使用栈内存效率比使用堆内存效率要高。
原因在此。
小楫轻舟 2010-09-19
  • 打赏
  • 举报
回复
楼主不知有没自己实现过栈,
pop时只是移动了top指针,
top上面的那个元素还在

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧