Linux 程序結構

2021-06-22 14:35:58 字數 714 閱讀 5195

**區:載入的是可執行檔案的**段,其載入到記憶體中的位置由載入器完成。在有作業系統支援時,程式不需要關注這一位置;如果是自己移植作業系統,則需要事先規劃各載入位置。這一點請參閱相關os移植內容。

全域性初始化資料區/靜態資料區:載入的是可執行檔案資料段,位置可位於**段後也可以分開。程式 在執行之初就為該資料段申請了空間,在程式退出時才釋放,因此,儲存於資料段的資料的生命週期為整個程式執行過程。

為初始化資料區(bss)。載入的是可執行檔案bss段,位置可以分開亦可以緊靠資料段。程式在執行之初就為該部分申請了空間,在程式退出時才釋放,因此,儲存玉該部分的資料的生命週期為整個程式執行過程。

棧區:由編譯器自動分配釋放,存放函式的引數值,返回值,區域性變數等。在程式的執行過程中實時申請和釋放,因此,區域性變數的生存週期為申請到釋放該段空間。

堆區:用於動態記憶體分配。一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由os**。

系統之所以分成這麼多個區域,主要基於一下考慮.

1.**段和資料段分開,執行時便於分開載入,在哈佛體系結構的處理器將取得更好的流水線處理效率。

2.**是依次執行的,由處理器的pc指標依次讀入,而且**可以被多個程式共享,資料在整個執行過程中有可能多次被呼叫,如果將**和資料混合在一起將造成空間的浪費。

3.臨時資料及需要再次使用的**在執行時放入棧中,生命周期短,便於提高資源利用率。

4.堆區可以由程式設計師分配和釋放,以便使用者自由分配,提高程式的靈活性。

linux 程序結構

linux乙個程序有3部分組成 段,資料段,堆疊段。段存放程式的可執行 資料段存放程式的全域性變數,常量,靜態變數。堆疊段中的堆用於存放動態分配的記憶體變數 堆疊段中的棧用於函式呼叫,存放函式的引數,函式內部定義的區域性變數。linux程序狀態 執行狀態 r表示 可中斷等待狀態 s表示 不可中斷等待...

Linux程序結構

1.區 text segment 載入的是可執行檔案 段 2.資料區 data segment 位置可位於 段後,也可以分開。程式在執行之初就為該資料段申請了空間,在程式退出時才釋放,因此,儲存於資料段 全域性初始化,靜態初始化資料 的資料的生存週期為整個程式執行過程。3.未初始化資料區 bbs,b...

Linux 程序 資料結構

程序相關函式的資料結構為 程序描述符task struct 管理這個資料結構的為各種等待佇列 執行佇列等。下面是任務 程序 資料結構,或稱為程序描述符。long state 任務的執行狀態 1不可執行,0可執行 就緒 0已停止 long counter 任務執行時間計數 遞減 滴答數 執行時間片。l...