1. 程式人生 > >Windows API一日一練 77 VirtualAlloc函數

Windows API一日一練 77 VirtualAlloc函數

深圳 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函數