在linux系統中每個程序的記憶體由很多部分組成:
文字段(**段,**區)包含了程序執行的程式機器語言指令,也就是**,文字段具有唯讀屬性,以防止程序通過錯誤的指標意外修改自身的指令,因為很多個程序可以同時執行同一**,所以文字段具有共享屬性,這樣,乙份程式的**可以拷貝對映所有這些程序的虛擬記憶體中。
初始化資料段包含顯式初始化的全域性變數和靜態變數,當程式載入到記憶體中時,從可執行程式中讀到這些變數的值
未初始化的資料段(bss段)包含未顯式初始化的全域性變數和靜態變數,程式啟動之前,將本段的所有變數會初始為0,由於歷史原因此段又稱作bss段,「block started by symbol」,將初始化的和非初始化的全域性變數和靜態變數分開儲存主要原因在於沒有必要為未初始化的變數分配儲存空間,相反,可執行程式只需要記住未初始化段資料的位置及其所需大小,知道執行時再由程式來載入分配這一空間
棧是乙個動態增長收縮的段,由棧幀組成,系統會為每個當前呼叫的函式分配乙個棧幀,棧幀中儲存了函式的區域性變數,實參,以及返回值
堆是程式可在執行時動態進行記憶體分配的一塊區域,
linux系統程序的記憶體布局
文章 記憶體管理模組是作業系統的心臟 它對應用程式和系統管理非常重要。今後的幾篇文章中,我將著眼於實際的記憶體問題,但也不避諱其中的技術內幕。由於不少概念是通用的,所以文中大部分例子取自32位x86平台的linux和windows系統。本系列第一篇文章講述應用程式的記憶體布局。在多工作業系統中的每乙...
Linux記憶體布局
變數名稱 說明num physpages 最高可用頁框的頁框號 totalram pages 可用頁框的總數量 min low pfn ram 中在核心映像後第乙個可用頁框的頁框號 max pfn 最後乙個可用頁框的頁框號 max low pfn 被核心直接對映的最後乙個頁框的頁框號 低位址記憶體 ...
Linux記憶體布局
我們先來看下linux記憶體布局,此圖比我之前寫的那篇文章寫的布局更詳細 在linux中,每乙個程序都被抽象為task struct結構體,稱為程序描述符,儲存著程序 各方面的資訊 例如開啟的檔案,訊號以及記憶體等等 然後task struct的乙個屬性mm struct管理著程序的所有虛擬記憶體,...