windows堆管理API

虽然我们通常编写程序是使用C运行时库的new或者malloc申请对内存,实际上C运行时库也是调用windows提供的一套用来管理堆内存的API。包括:HeapCreate, HeapDestroy, HeapAlloc, HeapFree...

每个进程要使用堆内存,就需要调用HeapCreate为自己创建一个私有的堆对象。

HANDLE WINAPI HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)

flOptions : 堆选项,C运行时库传入0,取默认值。

dwInitialSize : 初始大小,C运行时库传入4096.

dwMaximumSize : 允许分配的最大值,C运行时库传入0,表示可以申请非常大的内存。

函数返回一个句柄,表示这个堆对象,其他API都需要这个句柄。

进程销毁前,应该调用HeapDestroy销毁这个对象,此函数很简单,把句柄传入即可。

堆对象申请以后,就可以调用HeapAlloc申请堆内存了。

LPVOID WINAPI HeapAlloc(HANDLE hHeap, dwFlags, SIZE_T dwBytes)

hHeap : HeapCreate的返回值。

dwFlags : C运行时库传入0,取默认值。

dwBytes : 需要申请的堆内存的实际大小。

函数返回内存的地址。

申请了就要释放,调用HeapFree。

BOOL WINAPI HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)

hHeap : HeapCreate的返回值,似乎也可以调用GetProcessHeap来获取。

dwFlags : 继续为0。

lpMem : 也就是HeapAlloc的返回值,堆内存的地址。

在C运行时库中对这些API进行了一层封装,并加入了一些特性。

猜你喜欢

转载自blog.csdn.net/bwmwm/article/details/6411502
今日推荐