從高到低:
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...