WEB开发网
开发学院软件开发VC MFC教程(10)-- 内存分配方式和调试机制 阅读

MFC教程(10)-- 内存分配方式和调试机制

 2010-03-25 20:35:03 来源:WEB开发网   
核心提示:M内存分配内存分配函数MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用,MFC教程(10)-- 内存分配方式和调试机制,Win32的堆分配函数每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面,DLL创建的私有堆必定在调用DLL的进程的地址空间内,LPVOID

M内存分配

内存分配函数

MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。

Win32的堆分配函数

每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。

HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分配的内存是不能移动的;HeapSize可以确定从堆中分配的空间的大小;HeapFree用来释放从堆中分配的空间;HeapDestroy销毁创建的堆。

Windows传统的全局或者局部内存分配函数

由于Win32采用平面内存结构模式,Win32下的全局和局部内存函数除了名字不同外,其他完全相同。任一函数都可以用来分配任意大小的内存(仅仅受可用物理内存的限制)。用法可以和Win16下基本一样。

Win32下保留这类函数保证了和Win16的兼容。

C语言的标准内存分配函数

C语言的标准内存分配函数包括以下函数:

malloc,calloc,realloc,free,等。

这些函数最后都映射成堆API函数,所以,malloc分配的内存是不能移动的。这些函数的调式版本为

malloc_dbg,calloc_dbg,realloc_dbg,free_dbg,等。

Win32的虚拟内存分配函数

虚拟内存API是其他API的基础。虚拟内存API以页为最小分配单位,X86上页长度为4KB,可以用GetSystemInfo函数提取页长度。虚拟内存分配函数包括以下函数:

LPVOID VirtualAlloc(LPVOID lpvAddress,
DWORD cbSize,
DWORD fdwAllocationType,
DWORD fdwProtect);

该函数用来分配一定范围的虚拟页。参数1指定起始地址;参数2指定分配内存的长度;参数3指定分配方式,取值MEM_COMMINT或者MEM_RESERVE;参数4指定控制访问本次分配的内存的标识,取值为PAGE_READONLY、PAGE_READWRITE或者PAGE_NOACCESS。

LPVOID VirtualAllocEx(HANDLE process,
LPVOID lpvAddress,
DWORD cbSize,
DWORD fdwAllocationType,
DWORD fdwProtect);

该函数功能类似于VirtualAlloc,但是允许指定进程process。VirtaulFree、VirtualProtect、VirtualQuery都有对应的扩展函数。

1 2 3 4 5 6  下一页

Tags:MFC 教程 内存

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接