new/delete和malloc/free的关系与区别

new/delete

malloc/free

是运算符(只能重载,不能定义)

库函数(名字随便起)

能调用构造函数和析构函数

只能申请内存空间

抛异常

不抛异常,会返回NULL

分配内存设计,分配算法,查找,避免内存碎片,导致效率太低,因此程序员喜欢自己写new/delete,或者创建一个内存池来管理内存,提高效率。

malloc从堆里获得空间,有一个将可用内存块连接起来的空闲链表,free释放内存块时,将释放的内存块再次链接到空闲链表中。由于多次操作,最后的空闲链表会有很多小内存块,malloc申请时候没有足够大的,空闲链表就会试图去将小的组合成大的,此时就会延时请求,组合好足够大的内存块后再分配给malloc函数,所以在调用malloc动态申请内存时,一定要判断返回值

共性:申请动态内存,释放内存

new内置了sizeof,可自动计算所需空间

手工计算

抛出异常(给出错误地方直接改)

C语言中malloc/calloc/realloc/valloc/alloca/memalign函数内存分配失败后都会返回NULL,所以判断if(p1==NULL)就好

使用freedelete后,一定要给指针赋空值或指向合法内存空间对象,避免野指针,例如:delete[]p;

 

分配的是虚拟内存

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值