1. 程式人生 > >VirtualAlloc函式用法總結 預訂 調撥

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達到好的效率第四個引數,最好設成跟預訂時一樣的,當然不一樣也沒關係。

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