程式在記憶體中的布局

2021-08-09 22:25:43 字數 961 閱讀 1058

c語言程式在記憶體中的分布

*   **段(.text):存放著程式的機器碼和唯讀資料(常量)  

* 全域性區(靜態區):由編譯器編譯時分配,程式執行結束後釋放(屬於靜態記憶體分配),在程式的二進位制檔案中,.bss段不佔儲存空間,只有在載入到記憶體中才分配

> .data段: 存放已初始化的靜態變數(static 修飾)和全域性變數

> .bss段: 存放未初始化的靜態變數和全域性變數(全部初始化為0)

* 堆:是程式猿在程式中動態申請和釋放記憶體的區域,大小不固定

* 棧:程式執行時由編譯器自動分配,存放函式的引數值、區域性變數等值,程式結束後由編譯器自動釋放

**示例:

int a = 0;  //全域性初始化區

char *p1; //全域性未初始化區

main()

c++程式在記憶體中的分布:

*   棧區:程式執行時由編譯器自動分配,存放函式的引數值、區域性變數等值,程式結束後由編譯器自動釋放

* 堆區:一般由程式猿動態申請和釋放

* 全域性區(靜態區):編譯器編譯時即分配記憶體。全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域,程式結束後由系統釋放

* 文字常量區:存放常量字串,程式結束後由系統釋放

* 程式**區:程式的二進位制**

**示例:

int a = 0; //全域性初始化區

char *p1; //全域性未初始化區

int main()

C程式在記憶體中的布局

程式在記憶體中的分布 程式執行後在記憶體中分為4部分 區,資料區,堆區和棧區 源 已初始化的變數 未初始化的變數 堆空間 棧空間 命令列引數和環境變數 記憶體空間主要是堆疊 堆從低位址向高位址增長 棧從高位址向低位址增長。棧空間是靜態的儲存空間 函式的引數,函式的區域性變數儲存在棧區,函式呼叫時,需...

程式在記憶體中的布局結構

並根據自己的理解做了整理 參考 bss段 bss segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。儲存全域性未初始化的變數 資料段 資料段 data segment 通常是指用來...

linux 程序在記憶體中的布局

先從 linux平台下 虛擬記憶體管理說起,寫c程式時,我們經常會列印乙個指標位址,說這個指標指向某某記憶體位址.可這些位址是真實物理記憶體位址嗎?不是 這些只是虛擬記憶體位址.當乙個c程式調入記憶體開始執行後,在記憶體中就會產生乙個程序.而在多工作業系統中每個程序都擁有一片屬於自己的記憶體空間 記...