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為調整後的空間大小