c語言中的段和記憶體四區

2021-07-11 12:58:08 字數 853 閱讀 9738

根據c語言的特點,每乙個源程式生成的目標**將包含源程式所需要表達的所有資訊和功能。目標**中各段生成情況如下:

1.**段(code)

**段由程式中的各個函式產生,函式的每乙個語句將最終經過編譯和彙編生成二進位制機器**(具體生成哪種體系結構的機器**由編譯器決定)。

2.唯讀資料段(ro data)

唯讀資料段由程式中所使用的資料產生,該部分資料的特點是在執行中不需要改變,因此編譯器會將該資料放入唯讀的部分中。c語言的一些語法將生成唯讀資料段。

3.讀寫資料段(rw data)

讀寫資料段表示了在目標檔案中一部分可以讀也可以寫的資料區,在某些場合它們又被稱為已初始化資料段。這部分資料段和**段,與唯讀資料段一樣都屬於程式中的靜態區域,但是具有可寫的特點。

4.未初始化資料段(bss)

未初始化資料段常被稱之為bss(英文block start by symbol的縮寫)。與讀寫資料段類似,它也屬於靜態資料區,但是該段中的資料沒有經過初始化。因此它只會在目標檔案中被標識,而不會真正稱為目標檔案中的乙個段,該段將會在執行時產生。未初始化資料段只有在執行的初始化階段才會產生,因此它的大小不會影響目標檔案的大小。

5. 記憶體四區

1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。

2、堆區(heap): malloc

3、資料區:

全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 

常量區 :常量字串就是放在這裡的。 程式結束後由系統釋放

4、**區:存放函式體的二進位制**。

參考:

c語言記憶體四區( )

圖1 記憶體四區模型 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方 式類似於資料結...

C語言記憶體四區

圖一 記憶體四區模型 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 一 記憶體四區 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方...

C語言記憶體四區

1 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。2 堆區 一般由程式設計師分配並釋放,若程式設計師不釋放,程式結束時可能由作業系統 3 資料區 主要包括靜態全域性區和常量區。4 區 存放函式體的二進位制 分清楚變數的記憶體處於哪個區對於程式設計至關重要。乙個典型的,卻比較晦澀的例...