程式執行時的記憶體

2021-06-05 21:27:29 字數 528 閱讀 7606

當乙個源**通過gcc編譯成a.out,執行a.out時 程式便開始了執行之旅(即程序)

作業系統為程序分配堆疊空間,隨後把程式執行碼放入文字段,

把程式經過初始化的全域性變數和靜態變數放入data 把程式為初始化的全域性變數和靜態變數放入bss段 並對bss段資料初始化為0

之後cpu**段指標指向main的入口,cpu堆疊段指標指向棧頂。**段指標從main的入口位址順序讀取指令**並進行執行

碰到區域性變數和函式呼叫時,需要在棧頂分配空間,並把堆疊段指標下移,碰到malloc等動態分配函式 就在堆上分配記憶體

text:文字段 又稱**段 存放程式執行的**

data:資料段 存放全域性變數和或者靜態變數 在整個程式執行過程中有效

bss:bss段 存放未初始化的全域性變數或者靜態變數 在整個程式執行過程中有效

stack:存放函式呼叫棧和函式區域性變數,其中的內容在函式執行過程中有效,並由編譯器負責分配和收回

heap:堆段 由程式顯示分配和收回 不收回就會記憶體洩露

資料段和bss段統稱為資料區

程式執行時記憶體管理

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

程式執行時的記憶體分配

一 在程式執行期間,變數儲存空間有三種 1 靜態儲存區。內存在程式編譯的時候就已經分配好了,這塊內存在程式執行期間都存在,儲存全域性變數和靜態變數。2 棧儲存區。記憶體是在程式執行期間才分配的,函式內區域性變數及函式引數的儲存單元,當 函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理...

c 程式執行時的記憶體分配

c 中,記憶體分為5個區 堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。1 棧 是由編譯器在需要時自動分配,不需要時自動清除的變數儲存區。通常存放區域性變數 函式引數等。2 堆 是由new分配的記憶體塊,由程式設計師釋放 編譯器不管 一般乙個new與乙個delete對應,乙個new與乙個del...