malloc和new之间的区别

来源:互联网 发布:人工智能带来的便利 编辑:程序博客网 时间:2024/06/11 21:50

1.内存分配失败的返回值

malloc内存分配失败返回NULL

new内存分配失败返回bad_alloc;

2.需要分配的内存大小

new操作符在申请内存分配时,无需指定内存大小,编译器会根据信息自行计算

malloc在申请内存分配时,需要用sizeof()计算出其大小

3.对数组的处理

C++提供了new[]与delete[]来专门处理数组

new对数组的支持体现在它会分别调用构造函数函数初始化每一个数组元素,释放对象时为每个对象调用析构函数。注意delete[]要与new[]配套使用,不然会找出数组对象部分释放的现象,造成内存泄漏。

至于malloc,它就是为你开辟一片内存,至于你自己要干什么,它并不关心。所以如果要动态分配一个数组的内存,还需要我们手动自定数组的大小:

4.对内存的扩充

malloc:使用malloc分配的内存后,如果在使用过程中发现内存不足,可以使用realloc函数进行内存重新分配实现内存的扩充。(realloc先判断当前的指针所指内存是否有足够的连续空间,如果有,原地扩大可分配的内存地址,并且返回原来的地址指针;如果空间不够,先按照新指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来的内存区域。)

new:没有这样的方法让它扩充内存

5.是否可以被重载

malloc:不可以被重载

new:可以被重载


6.分配内存的位置

malloc:堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。( 栈是由编译器自动分配释放,存放函数的参数值、局部变量的值等。操作方式类似于数据结构中的栈。堆一般由程序员分配释放,若不释放,程序结束时可能由OS回收。注意这里说是可能,并非一定。所以我想再强调一次,记得要释放)

new:new操作符从自由存储区(free store)上为对象动态分配内存空间