虛擬位址(virtual address): cpu啟動保護模式後,程式執行在虛擬位址空間中。注意,並不是所有的「程式」都是執行在虛擬位址中。cpu在啟動的時候是執行在實模式的,bootloader以及核心在初始化頁表之前並不使用虛擬位址,而是直接使用實體地址的。
每乙個程序被給予它的非常私有的虛擬位址空間。對於32位的程序,位址空間是4g因為乙個32位指標能夠有從0x00000000到0xffffffff之間的任意值。這個範圍允許指標有從4294967296個值的乙個,覆蓋了乙個程序的4g範圍。對於64位程序,位址空間是16eb因為乙個64位指標能夠指向18,446,744,073,709,551,616個值中的乙個,覆蓋乙個程序的16eb範圍。這是十分寬廣的範圍。
因為每乙個程序接受它的自己的私有位址空間,當在乙個程序中的執行緒正在執行,執行緒能夠訪問僅僅屬於它的程序的記憶體。屬於所有其他程序的記憶體被隱藏並且對執行的執行緒來說無法訪問。
程序的虛擬位址空間的劃分
棧空間:存放的是區域性變數,函式形參,自動變數
特點:先進後出
管理許可權:系統
生命週期:所在函式被呼叫結束
在棧空間的變數如果沒有初始化,系統隨機賦值
堆空間:malloc ralloc calloc分配的空間
特點: 先進先出
管理許可權:使用者
未初始化的全域性變數為0
資料段:bss:儲存未初始化的全域性變數
rodata:常量,不可以做修改的
./data:靜態資料區,初始化的全域性變數,static修飾變數
**段
程序虛擬位址空間的劃分
使用的linux作業系統32位 4gb劃分為兩大部分核心和使用者,核心 1g,使用者3g。1g的核心位址空間可訪問全部的物理記憶體位址 3g的使用者位址空間訪問最大 3g的物理記憶體位址 使用者又劃分為棧空間,堆空間,全域性 資料區,段。1 棧空間 儲存著區域性變數,函式形參,自動變數 2 堆空間 ...
記憶體虛擬位址空間的劃分空間
當我們編碼的時候我們的源程式一般都放在硬碟上,然後當我們使用這個程式時電腦就會在記憶體上執行這個程式,然而電腦記憶體資源是十分緊缺的,一般電腦記憶體都是4g,8g,2g。所以當我們執行程式時並不是直接在記憶體上執行,而是在記憶體產生的虛擬位址空間上先進行,該虛擬空間一般也是4g,8g.這就涉及到了虛...
程序的虛擬位址空間
linux程序虛擬位址空間是linux記憶體管理的乙個重要部分。總的虛擬位址空間通常按3 1的比例劃分,其中1g分給核心,3g分給使用者。由低位址到高位址分別為 唯讀段 該部分空間 只能讀,不可寫 包括 段 rodata 段 c常量字串和 define定義的常量 資料段 儲存全域性變數 靜態變數 的...