Unix环境高级编程学习笔记(四) 进程环境
C程序的内存布局首先看下面这个图,有个大致的概念:
每一个C程序都有自己独立的地址空间,它们包含五个部分:1. 代码段(Text segment)存放程序的执行代码,即使在多进程的环境下,它也只有一份。2. 初始化数据段(Initialized data segment)例如初始化的全局变量
我们通常会有一个全局指针指向该表的首地址,它的声明如下:int atexit(void (*func)(void));每个进程可以利用这个函数注册至少32个函数(根据实现不同而不同),这些被注册的函数将被exit函数自动调用。
exit 函数会首先调用这些注册了的函数,然后关闭所有打开了的流,最后才返回kernel。
如果我们调用了exec系列的函数,那么,任何注册了的结束处理函数都将被清除。