程式虛擬位址布局

2021-05-23 13:17:18 字數 796 閱讀 1902

從高到低:

0x8000,0000 - 0xffff,ffff  核心空間

0x7fff,0000 - 0x7fff,ffff   64k的禁止進入區

0x0001,0000 - 0x7ffe,ffff  使用者空間

0x0000,0000 - 0x0000,ffff  null指標分配區(64k)

其中使用者空間中,使用者的exe程式一般載入到0x0040,0000(往高處載入),

而主線程(main/winmain執行緒)的棧空間是 : 0x0003,0000 - 0x0013,0000,而且棧空間是從高位到低位分配使用,

所以如果測試下面**:

view plaincopy to clipboardprint?

int _tmain(int argc, _tchar* argv)  

int _tmain(int argc, _tchar* argv)

其列印結果是:

0012,ff74

0012,ff78

0012,ff70

而且每次保持不變

而堆空間則從低往高分配,其中new最終呼叫 heapalloc(_crtheap, 0, size ? size : 1); 實現分配

在debug模式下 _crtheap = 0x003e,0000,也就是堆空間從 0x003e,0000 - 0x7ffe,0000

當然在堆空間中會有dll的載入,執行緒的棧空間等等,堆分配時會跳過這些被使用的空間

當建立乙個執行緒時,其執行緒的棧空間其實也是通過heapalloc開在堆上的,所以執行緒的棧空間位址不固定。

虛擬位址空間布局

在多工系統中,每個程序都執行在自己的虛擬位址空間上,32為模式下它是乙個4g的記憶體位址塊,在linux系統下主要分為1g核心空間和3g使用者空間,而在windows系統下,核心空間和使用者空間的劃分比例為2 2.位於虛擬位址空間最低部分為保留區,未賦予實體地址 text 為 段用來存放程式執行 d...

Tomcat虛擬位址

當不想把jsp程式 網頁等編寫的程式檔案部署在tomcat的根目錄下時,虛擬目錄是最好的選擇。虛擬目錄實際上是在伺服器上做乙個對映,把某個名稱命名的目錄指向另外乙個事實上存在的目錄,這樣可以增強安全性,訪問者並不清楚伺服器是否確實有無目錄,當伺服器某個盤中的空間不夠時,可以把程式部署到另乙個盤中做虛...

虛擬位址空間

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