malloc和new的比较
摘要:本文主要分析了malloc和new两者的区别。 1、申请的内存所处的位置 malloc是c语言中的概念,申请的是堆中的内存空间。堆是计算机操作系统中特殊分配出来的一个内存区域,用于程序的内存动态分配。 new是c++中的概念,申请的空间称之为自由存储区。自由存储区是针对于new的一个概念,可以理解为凡是用new申请的空间,都可以称之为自由存储区。 注意:自由存储区不一定是堆,也有可能是静态存储区。 2、返回类型 new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。 malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。 3、内存分配失败的返回值 new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL; malloc分配内存失败时返回NULL。 4、是否需要指定申请内存的大小 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。 malloc则需要显式地指出所需内存的尺寸。 5、是否调用析构函数和构造函数 使用new操作符来分配对象内存时会经历三个步骤: 第一步:调用operator new 函数(对于数组是operator new[])分配一块足够大的,原始的,未命名的内存空间以便存储特定类型的对象。 第二步