new和malloc区别

new和malloc区别
1.申请内存所在的位置
new操作符从自由存储区上为对象动态分配内存空间,而malloc函数从堆上为对象分配内存空间。自由存储区可以是堆也可以是静态存储区,这取决于operator new的实现细节。
2.返回类型安全性
new操作符内存分配成功时,返回的是对象类型指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操 作符;
malloc内存分配成功则是返回void*,需要通过强制类型转换将void*指针转换成我们需要的类型。
3.内存分配失败时的返回值
new内存分配失败时,会抛出bac_alloc异常,他不会返回NULL;
malloc内存分配失败时,返回NULL,习惯在malloc分配内存后判断分配是否成功。
4.是否需要指定内存大小
new操作符申请内存无须制定内存块的大小,编译器会根据类型信息自行计算;
malloc则需要显示的指出需要的内存块大小。
5.是否调用构造函数/析构函数
new/delete会调用对象的构造函数/析构函数以完成对象的构造/析构;malloc不会。
6.对数组的处理
new[]/delete[]专门处理数组,new[]为数组分配内存的时候,会分别调用构造函数初始化每一个数组元素,释放对象时为每一 个对象调用析构函数;
malloc动态分配一个数组的内存,需要手动输入数组的大小。
7.new与malloc是否可以相互调用
operator new/operator delete的实现可以基于malloc,而malloc的实现不可以调用new。
8.是否可以被重载
operator new/operator delete可以被重载;
malloc/free不允许被重载
9.对已分配内存的扩充
使用malloc分配的内存后,如果在使用过程中发现内存不足,可以使用realloc函数进行内存重新分配实现内存的扩充。
realloc先判断当前的指针所指内存是否有足够的连续空间,如果有,原地扩大可分配的内存地址,并且返回原来的地址指针;如果空间不够,先按照新指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来的内存区域;
new不能扩充内存。
10.处理内存分配不足
new分配的内存不足时会先调用一个用户指定的错误处理函数,然后抛出异常;
nalloc分配的内存不足时会返回NULL。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值