上次学习了全局内存分配在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 (pNewBuffer)
#011 {
#012 //测试虚拟内存
#013 ZeroMemory(pNewBuffer,1500);
#014 memcpy(pNewBuffer,_T("分配虚拟内存成功\r\n"),
#015 (_T("分配虚拟内存成功\r\n")));
#016 OutputDebugString((LPWSTR)pNewBuffer);
#017
#018 //删除分配内存
#019 VirtualFree(pNewBuffer,0,MEM_RELEASE);
#020 }
#021
#022 }
最新评论