程式執行時記憶體的各種資料段

2021-07-04 22:43:45 字數 672 閱讀 2817

1.簡介

在linux系統中,程式在記憶體中的分布如下所示:

: .text :**段,部分是編譯後程式的主體,也就是程式的機器指令。儲存函式的位址。

bss段:(bss segment)通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss段屬於靜態記憶體分配。

因為是全域性變數,所以在程式執行的整個生命週期內都存在於記憶體中。有趣的是這個段中的變數只占用程式執行時的記憶體空間,而不占用程式檔案的儲存空間。

.data:資料段(data segment)通常是指用來存放程式中

已初始化

的全域性變數

的一塊記憶體區域。資料段屬於靜態記憶體分配。

初始化過的全域性變數資料段,該段用來儲存初始化了的非0的全域性變數,如果全域性變數初始化為0,則編譯有時會出於優化的考慮,將其放在bss段中。因為也是全域性變數,所以在程式執行的整個生命週期內都存在於記憶體中。與bss段不同的是,data段中的變數既佔程式執行時的記憶體空間,也佔程式檔案的儲存空間。

heap(堆)中儲存程式中動態分配的記憶體,比如c的malloc申請的記憶體,或者c++中new申請的記憶體。堆向高位址方向增長。

stack(棧)用來進行函式呼叫,儲存函式引數,臨時變數,返回位址等。

程式執行時記憶體的各種資料段

1.bss段 該段用來存放沒有被初始化或初始化為0的全域性變數,因為是全域性變數,所以在程式執行的整個生命週期內都存在於記憶體中。有趣的是這個段中的變數只占用程式執行時的記憶體空間,而不占用程式檔案的儲存空間。可以用以下程式來說明這點,檔名為bss.c cpp view plain copy inc...

程式執行時的記憶體

當乙個源 通過gcc編譯成a.out,執行a.out時 程式便開始了執行之旅 即程序 作業系統為程序分配堆疊空間,隨後把程式執行碼放入文字段,把程式經過初始化的全域性變數和靜態變數放入data 把程式為初始化的全域性變數和靜態變數放入bss段 並對bss段資料初始化為0 之後cpu 段指標指向mai...

程式執行時記憶體管理

1,管理執行階段記憶體空間分配 malloc new int pn new int 儲存的型別,記憶體根據此設定相應儲存位元組的記憶體 pn是記憶體位址 所以 當宣告乙個變數的指標變數時沒初始化,宣告後再來初始化則pn 接收的應該是變數在記憶體中的位址 variablename pn是儲存在記憶體的...