Windows API一日一練 77 VirtualAlloc函式
阿新 • • 發佈:2018-12-23
上一次學習了全域性記憶體的分配,在
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 }
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://www.cnblogs.com/captainbed