【Windows核心編程筆記】第十五章 在應用程序中使用虛擬內存

預訂地址空間區域

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            //清理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章