VirtualAlloc函數原型爲
用於虛擬內存操作。是三種內存操作機制之一(其他兩種分別人堆 和內存映射文件)。VirtualAlloc函數有兩種用途第一種是在虛擬內存中預訂區域,在用作這個的時候 第三個參數爲MEM_RESERVE,如果想要從虛擬地址高處開始預訂以防止內存碎片的話還要與上MEM_TOP_DOWN,此時注意,第一個參數要爲NULL.
如果要爲第一個參數指定開始地址,需要注意的是一定的起始一定要爲顆粒的正數倍(64KB) 還需要注意 預訂的大小要爲頁面大小的正數倍。當然你也可以不用嚴格按照這樣來。系統會爲你做的,他的做法是當你不是64 的倍數時開始地址會往下走到達64的倍數,當大小不是2的倍數的時候系統會擴充到4的整倍數。
這個函數的第二中功能是 爲預訂好的虛擬內存中也交換文件中分配物理存儲器。此時第三個參數要爲MEM_COMMIT,爲了是CPU達到好的效率第四個參數,最好設成跟預訂時一樣的,當然不一樣也沒關係。
注意我們可以在預訂的虛擬內存中部分調撥內存。這個時候開始地址和大小多要爲頁面大小的整倍數。不是也沒關係,系統會幫你做的。原理跟上面一樣。