首页 > 编程知识 正文

new和malloc的使用,new的底层是malloc

时间:2023-05-06 08:03:11 阅读:146377 作者:281

new和malloc的区别1 .总体而言,(1) malloc和new都在堆上开拓内存。 malloc只负责内存的开拓,没有初始化功能,需要用户自己进行初始化。

new不仅可以开发内存,还可以像newint(1)那样进行初始化。 意味着在堆中打开了4字节的int形存储器,初始值为1;

new int[2] (; 在堆上打开一个包含两个整形元素的数组,表示初始值均为0。

)2) malloc是函数,释放内存需要像malloc(10 )那样传递字节数。 malloc返回值必须强制转换为指定类型的地址,因为它指示堆上已打开10字节的内存,返回void*并指示分配的堆内存的起始地址; new是运算符,需要指定类型才能打开内存,并返回指定类型的地址,因此不需要用力旋转。

2 .分门别类1 .需求:

new/delete是c关键字,需要编译器的支持。 malloc/free是库函数,需要头文件支持。

2 .传入:

malloc必须明确显示所需内存的大小。 如果使用new操作符请求内存,则无需指定内存块的大小。 编译器根据类型信息自己导出。

3 .返回类型:

如果malloc内存分配成功,则返回void *,需要通过强制类型转换将void *指针转换为所需的类型。 new操作符成功分配内存后,将返回对象类型指针,类型与对象严格匹配,无需进行类型转换,因此new是安全的。

4 .较低级别调用:

new首先调用operator new函数以申请足够的内存(基础使用malloc实现)。 然后调用类型构造函数,初始化成员变量,最后返回到自定义类型指针。

delete调用析构函数,然后调用operator delete函数释放内存。 基础在free中实现。

malloc/free是库函数,只能动态申请和释放内存,不能强制自定义对象的生成和析构函数的工作。 因此,malloc没有初始化功能,必须由用户自己初始化。

5 .申请失败:

如果new内存分配失败,则抛出异常(bac_alloc )。 如果malloc分配内存失败,则返回空值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。