程序的虛擬位址空間

2021-07-14 21:37:36 字數 1227 閱讀 2079

linux程序虛擬位址空間是linux記憶體管理的乙個重要部分。總的虛擬位址空間通常按3:1的比例劃分,其中1g分給核心,3g分給使用者。

由低位址到高位址分別為

: 唯讀段:

該部分空間

只能讀,不可寫

;(包括:

**段、rodata 段(c常量字串和#define定義的常量)

)資料段:

儲存全域性變數、靜態變數

的空間; 

堆:就是平時所說的動態記憶體, malloc/ralloc/calloc 大部分都**於此,其中堆頂的位置可通過函式 brk 和 sbrk 進行動態調整。;

棧:用於維護函式呼叫的上下文空間; 

核心虛擬空間:

使用者**不可見的記憶體區域,由核心管理。

物理記憶體:當開啟程式時,系統會將這些程式載入到物理記憶體上。

虛擬記憶體:虛擬的不是物理記憶體,而是代替物理記憶體行使儲存的功能,物理記憶體的執行程式的功能是無法用虛擬記憶體來完成的。

物理記憶體與虛擬記憶體的關係:當執行程式過多,物理記憶體不夠用時,系統會將一部分硬碟空間當記憶體使用,這部分空間就是虛擬記憶體。

虛擬位址空間作用:解決物理記憶體稀缺問題;系統為每個程序所分配的4gb

虛擬位址空間

(32位系統),用來存放程序的虛擬位址,再通過mmu(記憶體管理單元)將虛擬位址對映到物理記憶體位址。

windows下的

虛擬記憶體

指的是在硬碟上建乙個檔案,用來放置系統非活躍性記憶體資料或交換資料(怎麼放,放多少由作業系統決定)。

虛擬位址空間,指windows下每個程序的私有記憶體空間,大小是4g,能訪問的是不到2g的空間,其餘是系統保留的。這2g是能訪問的,但並不是立即分配的,當程序使用多少時,才從物理記憶體中劃分給它多少,劃分的的方式是"對映",作業系統將虛擬記憶體

的起始位址做個標記,標記成對應的物理記憶體的某個位址上.在這裡,只有作業系統知道,程序是沒有任何辦法知道的,這是windows的高階記憶體管理機制決定的。物理記憶體的位址空間,只有作業系統才能訪問(硬體驅動也可以,但已經屬於系統低層了,程序是屬於使用者層)程序虛擬記憶體

空間和物理記憶體空間的關係僅僅是看不見的對映關係。

虛擬記憶體通常只在系統物理記憶體用完時,才會使用到,但這個時候系統已經非常卡了.但也不是一點用處沒有,非活躍性程序的部分資料,系統是完全可以放在虛擬記憶體中的。

程序的虛擬位址空間劃分

虛擬位址 virtual address cpu啟動保護模式後,程式執行在虛擬位址空間中。注意,並不是所有的 程式 都是執行在虛擬位址中。cpu在啟動的時候是執行在實模式的,bootloader以及核心在初始化頁表之前並不使用虛擬位址,而是直接使用實體地址的。每乙個程序被給予它的非常私有的虛擬位址空...

程序虛擬位址空間的劃分

使用的linux作業系統32位 4gb劃分為兩大部分核心和使用者,核心 1g,使用者3g。1g的核心位址空間可訪問全部的物理記憶體位址 3g的使用者位址空間訪問最大 3g的物理記憶體位址 使用者又劃分為棧空間,堆空間,全域性 資料區,段。1 棧空間 儲存著區域性變數,函式形參,自動變數 2 堆空間 ...

虛擬位址空間

當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...