内存分配方式比较

原文连接:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366533(v=vs.85).aspx

下面简要比较一下各种内存分配方式:

CoTaskMemAlloc

GlobalAlloc

HeapAlloc

LocalAlloc

Malloc

New

VirtualAlloc

 

     GlobalAllocLocalAlloc和HeapAlloc基本上都是从堆中分配内存,但是他们提供的功能略有不同。例如:HeapAlloc在分配内存失败时会引发异常,而LocalAlloc却不行。同样,LocalAlloc支持内存再分配操作(增加或者减少皆可)且保持操作句柄不变,而HeapAlloc却不支持这种方式。

     从32位Windows系统开始,因为GlobalAlloc和LocalAlloc通过封装HeapAlloc函数实现,所以GlobalAlloc和LocalAlloc比HeapAlloc开销更大。

     因为不同的内存分配函数使用不同的机制实现相应的功能,所以在释放内存时需要使用对应的释放函数。例如HeapAlloc必须对应HeapFree,GlobalAlloc或者LocalAlloc也需要使用对应的函数进行相应的处理。

     VirtualAlloc函数允许在分配内存是使用附加的条件,然而该函数分配内存以页为单位,所以会导致较高的内存使用量。

     Malloc函数的缺点是运行时依赖,new操作的缺点是编译器和语言相关的依赖。

     CoTaskMemAlloc可以在C、C++和VB环境下良好的执行。自从MIDL使用CoTaskMemAlloc和CoTaskMemFree来整理内存,使得其成为唯一能在COM为基础的应用中实现内存共享的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值