C 編譯程式時的記憶體分配

2022-04-28 18:36:10 字數 512 閱讀 3933

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分

1、棧區(stack)— 程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。程式結束時由編譯器自動釋放。

2、堆區(heap) — 在記憶體開闢另一塊儲存區域。一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。

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

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

5、程式**區—存放函式體的二進位制**。

例子程式

這是乙個前輩寫的,非常詳細

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

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

main()

參考:

C 動態解析編譯程式(記憶體)

獲取命令內容 string strcommand dbcommon.getassemblevalue sender as toolstripmenuitem tag.tostring 5 編譯器初始化 icodecompiler comp new csharpcodeprovider createc...

C語言程式編譯的記憶體分配

c語言程式編譯的記憶體分配 1.棧區 stack 編譯器自動分配釋放,主要存放函式的引數值,區域性變數值等 2.堆區 heap 由程式設計師分配釋放 3.全域性區或靜態區 存放全域性變數和靜態變數 程式結束時由系統釋放,分為全域性初始化區和全域性未初始化區 4.字元常量區 常量字串放與此,程式結束時...

GCC編譯程式時的四個階段說明!

在使用gcc進行程式的編譯時通常要經歷四個階段 通常指的是從源程式到可執行的二進位制 這整個過程 一些以hello.c為例來說明這四個階段。hello.c includeint main gcc的四個階段如下 1.預處理階段 2.編譯階段 3.彙編階段 4.鏈結階段 四個階段的詳細資訊如下 1.預處...