預訂地址空間區域
VirtualAlloc 預訂進程中的地址空間區域,第二個參數類型是MEM_RESERVE
VirtualAllocExNuma 同上,區別在於應用程序在NUMA機器上運行
給區域調撥物理存儲器
VirtualAlloc 調撥物理存儲器,第二個參數是MEM_COMMIT
同時預訂和調撥物理存儲器
只調用VirtualAlloc一次,而不是上邊的兩次
PVOID pvMem = VirtualAlloc(NULL,99*1024,
MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);
何時調撥物理存儲器
使用虛擬內存,既能享受數組帶來的快速訪問,又能更好的節省存儲器(像鏈表那樣)
使用結構化異常處理方案決定何時調撥物理存儲器(最佳方式)
撤銷調撥物理存儲器及釋放區域
VirtualFree 撤銷物理存儲器或釋放地址空間區域
需要注意何時撤銷
改變保護屬性
VirtualProtect 改變一個內存頁面的保護屬性
重置物理存儲器的內容
VirtualAlloc 第三個參數傳MEM_RESET
地址窗口擴展(AVE)
主要用於32位程序,64位程序的進程地址空間非常大,一般不用AVE
AVE使用流程如下:
Virtualalloc(NULL,1024*1024,MEM_RESERV|MEM_PHYSICAL,PAGE_READWRITE);//預訂
AllocateUserPhysicalPages //分配物理存儲器
MapUserPhysicalPages //把內存塊指定給地址窗口
FreeUserPhysicalPages //釋放內存塊
VirtualFree //清理