内存分配新旧区别?删除与释放区别?
发布时间
阅读量:
阅读量
new与malloc的区别:
1、申请的内存所在位置
new是一种操作符,用于从自由存储区上为对象动态分配内存空间;而malloc则是从堆中获取一块合适的内存,即实现堆上的动态分配。
自由存储区是C++中基于new操作符所定义的一个抽象概念,所有通过new操作符申请的内存均位于该区域。而堆是操作系统层面的一个术语,属于操作系统维护的一块特殊内存区域,用于动态分配。自由存储区可能对应堆,也可能对应静态存储区(具体取决于operate new的实现方式)。
2、返回类型
当new操作符成功完成内存分配时,其返回值为对象类型的指针,类型与对象严格匹配,无需进行类型转换,因此new具有良好的类型安全性。
相比之下,malloc在成功分配内存后返回的是void*类型指针,需要通过强制类型转换将其转换为所需的指针类型。
3、内存分配失败时的返回值
当new无法完成内存分配时,会抛出bac_alloc异常,并不会返回NULL;而malloc在无法完成分配时则会返回NULL。
4、是否需要指定内存大小
使用new操作符进行内存申请时不需要手动指定所需空间大小,编译器会根据对象的类型信息自动计算所需的空间;而malloc则需要用户显式指定所需的空间大小。
5、是否调用构造/析构函数
使用new操作符来创建对象时通常包含三个步骤:
- 1
全部评论 (0)
还没有任何评论哟~
