找回密码
 立即注册
查看: 80|回复: 0

new与malloc的区别

[复制链接]

10

主题

0

回帖

40

积分

新手上路

积分
40
发表于 2022-9-11 11:31:35 | 显示全部楼层 |阅读模式
1、属性
    new/delete是关键字,需要编译器支持,而malloc/free是库函数,需要头文件支持
2、参数
    使用new操作符申请内存分配时无需指定内存块大小,编译器自行计算,而malloc则需要显指明所需内存大小
3、返回类型
    new操作符内存分配成功时,返回的是对象类型指针,类型与对象严格匹配,而malloc内存分配成功后返回的是void *型数据,需要强制类型转化才可以获取到我们需要的类型数据
4、分配失败
    new分配失败时,会抛出bac_alloc异常,而malloc分配失败时,会返回NULL
5、自定义类型
    new会先调用opertor new函数,申请足够内存,然后调用类型的构造函数,初始化成员变量。delete先调用operater delete函数释放内存
    malloc/free时库函数,只能动态的申请和释放内存,无法强制要求器做自定义类型对象构造和析构工作
6、重载
    C++允许重载new/delete操作符,特别的,布局new的就不需要为对象分配内存,而是指定了一个地址作为内存起始区域,new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址。
    malloc不允许重载。
7、内存区域
    new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就可以不位于堆中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|粤嵌技术交流空间

GMT+8, 2025-7-7 22:11 , Processed in 0.637826 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表