Windows核心编程<读书笔记四>return exit(0) ExitProcess的不同之处
来源:互联网 发布:苹果6突然只有2g网络 编辑:程序博客网 时间:2024/05/29 13:04
【文起】爱生活,爱编码,爱蟹儿。为了我跟蟹儿的幸福,奋斗
退出程序的几种方式
1、首先说下程序是如何启动的,前面的读书笔记已经详细写了,这儿再重复下
程序执行的步骤:
A、 检索指向新进程的完整命令行的指针;
B、 检索指向新进程的环境变量的指针;
C、 对C/C++运行期的全局变量进程初始化;
D、 对C运行期间内存单元分配函数和其他底层输入/输出例程使用的内存栈进程初始化;
E、 为所有全局和静态C++类对象调用构造函数
F、 进入接入点函数,执行、退出
G、 调用由_onexit函数的调用而注册的任何函数
H、 为所有全局和静态C++类对象调用析构函数;
I、 调用操作系统的ExitProcess函数
2、有如下程序:
class CSomeObj{public:CSomeObj() {printf("Constructor\r\n");}~CSomeObj(){printf("Destructor\r\n");}};CSomeObj g_GlobalObj;int _tmain(int argc, _TCHAR* argv[]){CSomeObj LocalObj;ExitProcess(0);//exit(0);return 0;}
调用 ExitProcess(0)时,发现输出为:
Constructor
Constructor
调用exit(0)时,输出为:
Constructor
Constructor
Destructor
调用return 0 时,输出为:
Constructor
Constructor
Destructor
Destructor
其实分析下应该知道:
在Windows下,return 0 的实际执行过程是:
1、先析构main函数内的局部对象,返回至调用main的函数。
2、调用exit函数,由exit函数调用doexit函数,在doexit函数中完成对全局对象的析构。
3、最后调用ExitProcess结束进程。
所以总结下:
ExitProcess不负责任何对象的析构;exit只负责析构全局对象;return 0可以析构局部对象并调用exit,因此能析构全部对象。
如果你使用的是VS2008,将会发现使用ExitProcess时全局变量也被释放了。
这个原因我也没能理解,如果您有好思路,欢迎指出。
【文尾】
如果文章对您有帮助了,请留下您对我和蟹儿的祝福,谢谢~~
- Windows核心编程<读书笔记四>return exit(0) ExitProcess的不同之处
- 结束程序的代码return 0 exit(0) ExitProcess(0)的不同之处
- 结束程序的代码return 0 exit(0) ExitProcess(0)的不同之处
- return, exit, exitprocess的对比
- Windows下return,exit和ExitProcess的区别和分析- -
- Windows下return,exit和ExitProcess的区别和分析
- Windows下return,exit和ExitProcess的区别和分析
- Windows下return,exit和ExitProcess的区别和分析
- Windows下return,exit和ExitProcess的区别和分析- -
- Windows下return,exit和ExitProcess的区别和分析
- Windows下return,exit和ExitProcess的区别和分析
- Windows下return,exit和ExitProcess的区别和分析- -
- C++:Windows下return,exit和ExitProcess的区别和分析
- 《Windows核心编程》读书笔记(四)
- Windows核心编程<读书笔记四> 进程的概念
- 《Windows核心编程》读书笔记四 进程
- Windows核心编程读书笔记
- Windows 核心编程读书笔记
- JMF应用篇 之 从摄像头捕获视频
- 找到病根 解决本本Windows下蓝屏的方法
- 淘宝网高性能可伸缩架构技术探秘
- Oracle 11g不使用sqlplusw工具
- Padding Oracle Attack实例分析
- Windows核心编程<读书笔记四>return exit(0) ExitProcess的不同之处
- C/C++程序员应聘常见面试题深入剖析(2)
- 如何通过Git在本地建立Linux Kernel的版本库镜像
- 用一个it人的方式思考
- FTP ACE
- 中共代表大会
- Socket编程中,阻塞与非阻塞的区别
- 一个小项目
- APS.NET页面保存数据方