???? 進程總是從?? main?? 函數開始執行的,main函數的函數原型如下:
int main(int argc,char* argv[]);
unix多用于把進程輸出、???? 進程的終止方式分為正常終止和異常終止兩種方式,這兩種方式的情況如下:
正常終止
1.從 main 函數返回
2.調用 exit 函數
3.調用 _exit 函數異常終止
1.調用 ? abort ? 函數
2.由一個信號終止
???? exit?? 函數和?? _exit?? 函數用來終止一個程序,它們兩個的區別是,調用?? _exit?? 函數會立即進入到內核,而調用?? exit?? 函數,會先進行一些處理善后工作(如刷新IO),然后調用?? _exit?? 函數進入內核。我們可以使用?? atexit?? 函數來注冊一些終止處理程序,這些終止處理程序在調用?? exit?? 函數時會自動執行,并且先注冊的后執行,后注冊的先執行。一個c程序的啟動和終止的生命周期圖如下:
shell程序設計。c?? 語言的命令行參數,我只前曾經總結過,詳情參考我的另一篇博客點擊打開鏈接。
???? 由于歷史的原因,c程序的存儲空間布局一直是如下的格式:
redis筆記,我們就從下到上一次介紹每一個部分。
???? 正文部分也就是程序體,一般將它設置為只讀的,所以程序的正文是可以被幾個進程共享的。即使對于經常使用的程序,它的程序正文在內存中也只有一個拷貝。初始化數據段用來存儲被賦予初值的全局變量。例如在所有函數之外聲明的變量, int max = 100;就存放在這個區域。未初始化數據段用來存儲未賦予初值的全局變量。例如,函數之外的聲明,long sum[1000];就存儲在這個區域中,在這個區域中的值被初始化為0。堆用來為程序在運行時動態的分配內存空間。棧用來存儲函數中的一些局部變量以及在發生函數調用時,保存現場信息。最上面用來存放命令行參數和環境變量。
???? 說到環境變量就需要提到進程的環境表。以前?? main?? 函數的原型是下面這個樣子的:
int main(int argc,char* argv[],char* envp[]);
#include <stdlib.h>char *getenv(const char *name);
#include <stdlib.h>int putenv(char *string)
#include <stdlib.h>int setenv(const char *name, const char *value, int overwrite);int unsetenv(const char *name);
docker進程、
???? 存儲器分配主要涉及到4個函數:
#include <stdlib.h>void *malloc(size_t size);void free(void *ptr);void *calloc(size_t nmemb, size_t size);void *realloc(void *ptr, size_t size);
docker的技術特性。???? 5.setjmp和longjmp
???? setjmp和longjmp函數用來在各個函數之間來回跳轉,相當與是函數之間的goto語句。但是在哥各個函數之間跳轉時,需要注意變量是否回滾。一般來說,需要將變量聲明為?? volatile 為最好,這樣就可以保證變量不會因為?? longjmp?? 而發生回滾。volatile?? 為易失性變量,這樣就保證了,變量一直存儲在存儲器中,從而變量就不會發生變化。
???? 6.共享庫
LINUX教程、???? 共享庫就是把程序可能用到的頭文件,放入到內存的一個共享存儲區中,而不用放到每一個程序文件中。當程序執行時,再動態的鏈接共享存儲區中的內容。這樣就減少了程序正文的長度,但是也相應的加長了程序的執行時間。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态