程式的記憶體分布

2021-08-19 23:39:45 字數 618 閱讀 7496

32位的系統中,記憶體空間擁有4gb(2的32次方)的定址能力。大多數的作業系統都會將記憶體空間 中的一部分挪給核心使用,應用程式無法直接訪問這一段記憶體。

windows預設情況會將高位址的2gb空間分給核心,而linux缺省會將高位址的1gb空間分配給核心,剩下的空間被稱為記憶體空間。

一般來說,應用程式記憶體空間會有下面預設區域:

棧:用於維護函式呼叫的上下文,離開棧函式呼叫就無法實現通常,區域性變數也將不存在。棧通常在使用者空間的最高位址處分配,通常有數兆位元組大小。

堆:堆是用來容納應用程式動態分配的記憶體區域,使用malloc或new分配記憶體時,得到的記憶體就來自堆裡。堆通常存在於棧的下方(低位址),堆沒有固定統一的儲存區域,一般比棧大很多,可以有幾十至數百兆位元組的容量。

可執行檔案映像:由裝載器在裝載時將可執行檔案的記憶體讀取或對映到這裡。

保留區:保留區並不是乙個單一的記憶體區域,而是對記憶體中受到保護而禁止訪問的記憶體區域的總稱,如:在大多數作業系統中,極小的位址通常都是不允許訪問的。

動態鏈結庫對映區:用於對映裝載的動態鏈結庫

linux下乙個程序裡的記憶體布局

程式記憶體分布

乙個完整的程式,在記憶體分布中的分布情況如下 1 區 2 全域性資料區 3 堆區 4 棧區 一般程式的由new產生的動態資料存放到堆區,堆用於儲存哪些生存期與函式無關的資料,函式內部的自動變數存放在棧區,區域性變數和函式引數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部...

C C 程式的記憶體分布

理解c c 程式中的記憶體分布,可以幫助我們減少程式設計時犯常見的錯誤,如將指向區域性變數的位址返回等。在c c 中,通常可以把記憶體理解成4個分割槽 棧 堆 全域性 靜態儲存區和常量儲存區。1 棧 通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函式作用域內 塊作用域 建立 在離開作...

c程式的記憶體分布

一 c程式的記憶體分布 既然static是用來修飾變數和函式的,而變數和函式又是組成 c程式必不可少的,c程式的 記憶體分布圖如下。c 程式由下面5 部分組成 1 正文段 cpu 執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所...