码迷,mamicode.com
首页 > 其他好文 > 详细

return, exit, _exit的区别

时间:2015-11-24 22:04:47      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

return是返回的最常用的方式

_exit属于POSIX定义的系统调用

exit是GLIBC封装之后的函数

1 _exit和exit都会导致整个进程退出,清理进程所占用的资源,但是glibc封装exit函数的时候加了一些功能:比如提供了在结束程序时回调的接口(atexit), flush 缓冲区(系统调用是没法做这个的

,因为像printf, scanf之类的缓冲区都属于应用层缓冲区,内核清理资源自然无法顾及)

2return 会清理函数栈,另外两个就不会了,如果是最后一个线程return,也会像exit那样清理资源并flush缓冲区,这一点可以通过一段代码观察一下:

  

 1 #include<iostream>
 2 #include<unistd.h>
 3 using namespace std;
 4 
 5 class A
 6 {
 7 public:
 8     A(){
 9         cout << "constructor" << endl;
10     }
11     ~A(){
12         cout << "distructor" << endl;
13     }
14 };
15 void func(int i)
16 {
17     A a;
18     if(i == 0)
19         _exit(-1);
20     else
21         return;
22 }
23 
24 int main()
25 {
26     func(1);
27     return 0;
28 }

这里可以发现,只有按照return 方式返回局部变量a的析构函数才能得到调用,因为exit _exit都是不清理函数栈的.

一般这不会有什么问题,因为资源都回收了,栈空间自然也没了.但是对于约定在函数返回时调用的函数就没法调用了.

return, exit, _exit的区别

标签:

原文地址:http://www.cnblogs.com/hustxujinkang/p/4992949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!