malloc,free,new,delete的比较

 

malloc和free是C标准库函数里的,声明在stdlib.h中,实现上都会通过系统调用让操作系统完成动态内存的分配或释放,具体实现是通过在划分的内存块前面设计一个长度字段和有效字段,当malloc时,搜寻内存池中不小于所要求字节数的内存块,设置内存块前面的长度字段并将有效字段置0。当free时,只需简单得通过指针向前找到该内存块的有效字段,置1重新定为有效即可。所以free是开销很小的,开销大部分是malloc寻找所需内存块与合并内存块的过程。所以在malloc时,尽量分配2的幂大小内存块,最大限度地降低性能损失。

new和delete是C++中的操作符,涉及内存分配上的细节如上,它们与malloc和free的区别是在动态分配对象时会调用对象的构造函数和析构函数。(题外话:它们也可以重载,完成附加的要求,当然也可以重载成完全不用的语义。)

另外new是类型安全的,而malloc则不是,如下所示

int* a = new float[4]; // 编译时指出错误
      int* a = malloc(2*sizeof(float)); // 编译时无法指出错误

在分配内置类型变量时,malloc,free与new,delete是几乎等效的。

在分配对象时,则需要用到new,delete来调用构造函数和析构函数。


考虑到代码的可读性,建议malloc和free一块使用,new和delete一块使用,而且new [] 和delete []要一块使用,否则可能会发生未定义错误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值