Linux程序的虛擬記憶體區域劃分

2022-07-19 06:45:08 字數 1248 閱讀 7965

linux程序的虛擬記憶體區域分為:**區、唯讀常量區、全域性區、bss段、堆區、棧區

**區:儲存功能**,函式名所在的區域

唯讀常量區:存放字串常量,以及const修飾的全域性變數

全域性區/資料區:存放已經初始化的全域性變數和已經初始化用static修飾的區域性變數

bss段:存放沒有初始化的全域性變數和未初始化靜態區域性變數,該區域會在main函式執行前進行自動清零

堆區:使用malloc/new free/delete函式處理的記憶體,該區域的記憶體需要程式設計師手動申請和釋放

棧區:存放區域性變數(包括函式的形參),const修飾的區域性變數以及塊變數,該區域的記憶體由作業系統負責分配和**,程式設計師儘管放心使用

可以通過以下**來驗證以上linux程序的虛擬記憶體區域劃分

//

程序中記憶體區域的劃分

#include #include

#include

int i1 = 10; //

全域性區int i2 = 20; //

全域性區int i3; //

bss段

const

int i4 = 40;//

唯讀常量區

void fn(int i5) //

棧區int main(void

)

執行結果如下:

**區:fn = 0x40062d

-----------------------

唯讀常量區:&i4 = 0x400884

唯讀常量去:str = 0x400888

---------------------

全域性區:&i1 = 0x601058

全域性區:&i2 = 0x60105c

全域性區:&i7 = 0x601060

---------------------

bss段:&i3 = 0x601068

---------------------

堆區:p1 = 0x1d9b010

堆區:p2 = 0x1d9b030

---------------------

棧區:&i5 = 0x7ffd409525ec

棧區:&i6 = 0x7ffd409525f0

棧區:&i8 = 0x7ffd409525f4

棧區:strs = 0x7ffd40952610

Linux程序的虛擬記憶體

使用者程序的虛擬位址空間是linux的乙個重要的抽象 它為每個執行程序提供了同樣的系統檢視,這使得多個程序可以同時執行,而不會干擾到其他程序記憶體中的內容。每個應用程式都有自己的線性位址空間,與所有其他應用程式隔開。各程序虛擬位址空間起始於0,延伸到task sieze 1,其上是核心位址空間。使用...

Linux程序虛擬記憶體簡介

使用者態和核心態 程序在執行時一般存在兩種狀態 使用者態 核心態。使用者態是指程序在執行使用者 核心態時指程序在執行核心 所以在linux中每個程序都存在兩個棧分別使用者使用者態和核心態的執行。使用者空間和核心空間 在32位系統中linux程序的虛擬記憶體為4gb,linux核心將這4g位元組的空間...

程序的虛擬記憶體

程序屬性資訊的task struct結構體,其中包含程序使用的記憶體資訊。在32位的作業系統中,當程序建立的時候 程式執行時 系統會為每乙個程序分配大小為4gb的虛擬記憶體空間,用於儲存程序屬性資訊。c語言中的變數,通常使用 運算子來獲得其位址,那麼,這個位址就是虛擬位址,在簡單的微控制器中,編寫的...