Windows API一日一練 77 VirtualAlloc函數
阿新 • • 發佈:2018-12-23
深圳 class 動態 http res pro pan lpad 虛擬
上一次學習了全局內存的分配,在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
Windows API一日一練 77 VirtualAlloc函數