c程序記憶體布局說明

2021-08-17 08:08:08 字數 550 閱讀 1700

initialized data: data段

uninitialized data:bss段 

以上兩者組成了資料段。其中data段存放的是已經初始化的全域性變數和已經初始化的static區域性變數,**於二進位制可執行檔案中的資料部分,這部分在編譯的時候就已經放置到二進位制檔案中;bss段存放的是未初始化全域性變數和未初始化static區域性變數,其內容不**於二進位制可執行檔案中的資料部分(也就是說:二進位制可執行檔案中的資料部分沒有未初始化全域性變數和未初始化static區域性變數)。根據c語言標準規定,它們的初始值必須為0,因此bss段存放的是全0.

heap:堆 負責分配malloc

stack:棧 存放的是動態區域性變數。也就是函式內部定義的變數。需要注意的是棧頂是朝向記憶體低位址的,和heap堆正好相對。當子函式返回時,系統的棧會向記憶體高位址延伸,這相當於釋放子函式的動態區域性變數的記憶體空間。假設main函式在呼叫子函式a後立即呼叫子函式b,那麼子函式b的動態區域性變數就會覆蓋原來子函式a的動態區域性變數的儲存空間。這就是子函式不能互相訪問對方動態區域性變數的根本物理原因。

記憶體的最高端存放的是命令列引數和環境變數。

linux 下 C 程式 程序 記憶體布局

記憶體對映段 堆的起始位址加上隨機的偏移量來打亂布局。不幸的是,32 位位址空間相當緊湊,給隨機化所留下的空當不大,削弱了這種技巧的效果 程序位址空間中最頂部的段是棧,大多數程式語言將之用於儲存區域性變數和函式引數。呼叫乙個方法或函式會將乙個新的棧楨 stack frame 壓入棧中。棧楨在函式返回...

5 2 1 程序的記憶體布局

c 應用程式效能優化 第2版 第5章作業系統的記憶體管理,本章前一部分著重介紹windows的虛擬記憶體管理機制,後一部分則簡要介紹linux的虛擬記憶體管理機制。本節為大家介紹程序的記憶體布局。2010 06 03 11 56 收藏 分享 5.2 linux記憶體管理機制 linux的記憶體管理主...

Linux程序的記憶體布局

這張圖很好,注意其中最上面是高位位址,雖然很多個0,但是c開頭的,不要看反了 更具體的可以看這裡 a.正文段。這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是經常執行的程式 如文字編輯程式 c編譯程式 shell等 在儲存器中也只需要有乙個副本,另外,正文段常常是唯讀的,以防止程式...