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

Windows API一日一練 77 VirtualAlloc函式

上一次學習了全域性記憶體的分配,在 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