1.进程中止的五种方法:
正常中止: 从main返回, 调用exit和调用_exit
非正常中止:调用abort 以及被信号(signal)中止
exit与_exit的区别主要在,前者在退出程序前将关闭该进程所有打开的文件流等清理工作,然后返回内核,而后者则直接返回内核,不作任何清理工作.
另外还有一个atexit函数,可以注册一个函数在程序退出之前执行.
#include
int atexit(void (*func)(void)); //正确注册返回0,否则返回非零值.
一个程序可以多次利用atexit注册多个函数,调用顺序则是注册顺序的逆续.
2.环境列表
程序在执行之前,shell将向程序进程传递参数列表以及环境列表(environment list)
环境列表是由字符指针组成的数组,这个数组的地址保存在一个全局环境变量中extern char **environ
3.C程序的内存布局
C程序包含五个内存部分
Text segment:存放机器指令,该部分一般是多个程序共享,并且为只读
Initialized data segment: 存放被初始化的数据,如局部变量 int a = 1;
Uninitialzed data segment : 存放未被初始化数据,如数组 char buffer[100];
Stack: Automatic变量存放在堆栈中
Heap: 动态内存分配在Heap中.
4.内存分配
在Ansi C中规定了三个内存分配函数:malloc, calloc, realloc (均在Heap中分配内存)
#include
void*malloc(size_t size); //分配大小为size个字节的空间
void *calloc(size_t nobj, size_t size); //为指定个数的对象分配内存,每个对象大小为size字节,共分配nobj*size个字节
void *realloc(void *ptr,size_t newsize); //重新分配Ptr所指内存块的大小,newsize为调整后的空间大小