| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 964 人关注过本帖
标题:奇怪的exit函数
只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
 问题点数:0 回复次数:3 
奇怪的exit函数
程序代码:
#include <stdlib.h>

int main(void)
{
  exit(0);
}
(gdb) disas exit
Dump of assembler code for function exit@plt:
0x0804832c <exit@plt+0>:    jmp    *0x804a008
0x08048332 <exit@plt+6>:    push   $0x10
0x08048337 <exit@plt+11>:    jmp    0x80482fc
End of assembler dump.

一般函数都会在开始部分保存堆栈的,但是这个exit函数去比较特别,竟然没有push之类的指令,是不是因为这个函数不必返回,所以不用保存堆栈了?


搜索更多相关主题的帖子: exit 函数 
2010-11-01 22:20
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
从分析过程,我们可以得出以下结论。
在Windows下,return 0 的实际执行过程是:

    *
      先析构main函数内的局部对象。
    *
      返回至调用main的函数。
    *
      调用exit函数,由exit函数调用doexit函数,在doexit函数中完成对全局对象的析构。
    *
      最后调用ExitProcess结束进程。

所以,ExitProcess不负责任何对象的析构,exit只负责析构全局对象,return 0可以析构局部对象并调用exit,因此能析构全部对象。

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-11-01 22:44
wisji8
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:53
专家分:198
注 册:2010-9-19
收藏
得分:0 
还没能力懂。
2010-11-26 20:17
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
exit函数确实挺奇怪的

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-01-09 00:20
快速回复:奇怪的exit函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046063 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved