上一次學習了全域記憶體的分配,在Windows裡記憶體管理是分為兩部份,全域記憶體是系統管理的記憶體,因而所有進程都可以訪問的記憶體,而每一個進程又有自己的記憶體空間,這就是虛擬記憶體空間了,而虛擬記憶體的空間比較大,當實體記憶體不足時,系統會把虛擬記憶體的資料儲存到硬碟裡,這樣只要硬碟的空間足夠大,每個進程就可以使用3G的記憶體。虛擬記憶體分配可以作為程式裡分配記憶體的主要方式,比如大量的資料緩衝區,動態分配記憶體的空間。使用VirtualAlloc函數來分配記憶體的速度要比全域記憶體要快。
函數VirtualAlloc聲明如下:
WINBASEAPI
__bcount(dwSize)
LPVOID
WINAPI
VirtualAlloc(
__in_opt LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD flAllocationType,
__in DWORD flProtect
);
lpAddress是指定記憶體開始的地址。
dwSize是分配記憶體的大小。
flAllocationType是分配記憶體的類型。
flProtect是訪問這塊分配記憶體的許可權。
調用函數的例子如下:
#001 //
#002 //分配虛擬記憶體的分配。
#003 //蔡軍生 2007/11/20 QQ:9073204 深圳
#004 void MemVirtual(void)
#005 {
#006 //
#007 //分配新記憶體大小。
#008 UINT nNewSize = (UINT) ceil(1500 / 1024.0) * 1024;
#009 PBYTE pNewBuffer = (PBYTE) VirtualAlloc(NULL,nNewSize,MEM_COMMIT,PAGE_READWRITE);
#010 if (pNewBuffer)
#011 {
#012 //測試虛擬記憶體。
#013 ZeroMemory(pNewBuffer,1500);
#014 memcpy(pNewBuffer,_T("分配虛擬記憶體成功\r\n"),
#015 sizeof(_T("分配虛擬記憶體成功\r\n")));
#016 OutputDebugString((LPWSTR)pNewBuffer);
#017
#018 //刪除分配的記憶體。
#019 VirtualFree(pNewBuffer,0,MEM_RELEASE);
#020 }
#021
#022 }
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/caimouse/archive/2007/11/20/1895301.aspx