C 記憶體空間分布

2021-09-28 22:54:52 字數 496 閱讀 2392

1.stack,即棧區,存放自動變數,以及函式呼叫時儲存的資訊。每當進行函式呼叫時,函式的實參和返回位址以及呼叫者的上下文環境會被存放在棧中;棧區由編譯器自動分配,從高位址向低位址擴充套件,為什麼會這樣?我也不知道

2.heap,即堆區,動態記憶體分配都是發生在堆區,堆區由程式設計師分配釋放,或程式結束後由作業系統自動**,從低位址向高位址擴充套件

3.uninitialized data,即未初始化資料段,通常稱為bss段,未初始化的全域性變數和靜態變數都存放在此處;這個段在程式開始之前由核心初始化為全0,所以不在可執行檔案中占用位置,可減少可執行檔案體積

4.initialized data,即已初始化資料段,通常稱為資料段,已初始化的全域性變數和靜態變數都存放在此處,可進一步劃分為唯讀區和讀寫區

5.text,即文字段/**段,用來存放程式的可執行**,**段是唯讀的,防止被修改

記憶體空間分布

code或.text,段 用來存放可執行的機器指令的一塊記憶體區域,這部分區域的 屬於唯讀。字串常量也在也在 段上。data,資料段 用來存放程式中已初始化的全域性變數的一塊記憶體區域,例如已初始化的全域性變數和區域性靜態變數 初始化為非0 bss 用來存放程式中未初始化的全域性變數的一塊記憶體區域...

c 程序記憶體空間分布

c 程序記憶體空間分布 注意各部分的記憶體位址誰高誰低,注意棧從高到低分配,堆從低到高分配 記憶體分布分為5個部分,從高位址到低位址一次為 棧區 stack 堆區 heap 未初始化資料段 uninitialized data 初始化資料段 initialize data 段 text 1.文字段也...

C語言記憶體空間分布詳解

bss段 bss segment 通常是指用來存放程式中 未初始化 的全域性變數 的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。資料段 資料段 data segment 通常是指用來存放程式中 已初始化 的全域性變數 的一塊記憶體區域...