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进行了一层封装,并加入了一些特性。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值