new与malloc区别

两者都用于初始化分配内存。

malloc:

引入头文件 stdlib.h

内存大小:malloc通过计算得到一块新内存。

内存分配过程:使用malloc,向操作系统申请内存,操作系统会遍历空间内存节点,将第一个大于申请空间的内存分配给程序,然后将空闲链表节点删除。

成功分配:返回值为指向被分配内存的指针。

失败分配:返回NULL。

返回类型:void* 可通过强制转换为其他任意类型。

释放:free,使用free前需要确认指针非空。


new:

C++中的运算符。

new无需指定分配内存大小,会自动按照类型分配内存,并且会执行构造操作。

使用delete时注意将指针置为0,否则会形成悬垂指针。

所以可以认为 new = malloc + 构造。new更高级一些。

释放:delete 或 delete []

delete可以delete空指针。


为什么有了malloc还要有new?

因为主要是c语言中使用,malloc只能为基础数据类型分配内存,对于非内部数据类型动态对象而言,不能完成对象的初始化和构造,而new可以在编译器的控制权限内完成对象的初始化和销毁任务。


为什么有了new还要有malloc?

历史遗留问题,内部数据类型没有构造和析构的过程,所以malloc和new对它们是等价的。

然后C++程序经常调用C函数,C程序只能用malloc管理动态内存。


区别主要有以下几点:

1、属性

new是C++中的关键字,编译器支持的。

malloc是库函数,需要头文件支持的。引入头文件 stdlib.h

2、参数

malloc需要指定分配的内存大小。

new会自动根据类型分配对应的内存大小。

3、返回类型

new返回类型是与申请类型指针符合的,是类型安全的操作符。

malloc返回的都是void*,需要做一次强制转换。

4、分配失败。

new分配失败会抛异常。

malloc分配失败直接返回NULL。

5、自定义类型

new会先调用new函数,申请足够内存(底层通常还是使用malloc),然后调用类型的构造函数初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用free实现。

6、内存区域

new申请的内存在自由存储区。

malloc申请的内存在堆上。

自由存储区与堆得区别:堆是物理概念,自由存储区是逻辑概念。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值