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語言中的變數,通常使用 運算子來獲得其位址,那麼,這個位址就是虛擬位址,在簡單的微控制器中,編寫的...