1. 程式人生 > >程序地址空間佈局

程序地址空間佈局

在這裡插入圖片描述

建立一個程序時,作業系統會為該程序分配一個 4GB 大小的程序地址空間,本文具體講的是程序地址空間的各個部分: 棧: 存放程式臨時建立的區域性變數,也就是程式碼塊之內或者函式之內的變數,但不包括static修飾的(static修飾的變數放在資料段);還存放函式引數和返回值等;它分配的記憶體是在一塊連續的記憶體區域內,當宣告變數時,那麼編譯器會自動接著當前棧區的結尾來分配記憶體。

存放動態分配的記憶體段,比如malloc與new出來的空間;堆在記憶體中的分佈不是連續的,它們是不同區域的記憶體塊通過指標連結起來的,一旦某一節點從鏈中斷開,我們要人為的把所斷開的節點從記憶體中釋放。

棧和堆相向而生,棧從高地址到低地址,堆從低地址到高地址。

BSS未初始化資料段 存放程式中未初始化的全域性變數。 已初始化資料段 存放程式中已初始化的全域性變數。 資料段屬於靜態分配。

程式碼段 存放程式執行程式碼的一塊記憶體區域,部分割槽域的大小在程式執行前就已經確定,並且記憶體區域通常屬於只讀, 某些也允許程式碼段為可寫,即允許修改程式。在程式碼段中,也有可能包含一些只讀的常數變數,如字串常量等。