VirtualAlloc函數用法總結 預訂 調撥

VirtualAlloc函數原型爲

LPVOID VirtualAlloc(
LPVOID lpAddress, // region to reserve or commit
SIZE_T dwSize, // size of region
DWORD flAllocationType, // type of allocation
DWORD flProtect // type of access protection);

用於虛擬內存操作。是三種內存操作機制之一(其他兩種分別人堆 和內存映射文件)。VirtualAlloc函數有兩種用途第一種是在虛擬內存中預訂區域,在用作這個的時候 第三個參數爲MEM_RESERVE,如果想要從虛擬地址高處開始預訂以防止內存碎片的話還要與上MEM_TOP_DOWN,此時注意,第一個參數要爲NULL.

如果要爲第一個參數指定開始地址,需要注意的是一定的起始一定要爲顆粒的正數倍(64KB) 還需要注意 預訂的大小要爲頁面大小的正數倍。當然你也可以不用嚴格按照這樣來。系統會爲你做的,他的做法是當你不是64 的倍數時開始地址會往下走到達64的倍數,當大小不是2的倍數的時候系統會擴充到4的整倍數。

 

這個函數的第二中功能是 爲預訂好的虛擬內存中也交換文件中分配物理存儲器。此時第三個參數要爲MEM_COMMIT,爲了是CPU達到好的效率第四個參數,最好設成跟預訂時一樣的,當然不一樣也沒關係。

注意我們可以在預訂的虛擬內存中部分調撥內存。這個時候開始地址和大小多要爲頁面大小的整倍數。不是也沒關係,系統會幫你做的。原理跟上面一樣。

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