C和C++分配释放内存区别?
作者:野牛程序员:2023-12-04 20:31:39 C++阅读 2805
C++中的new和delete是关键字,而malloc和free是库函数。使用new时,无需指定内存块的大小,编译器会根据类型信息自动计算;而malloc需要显式指定内存块的大小。new操作符分配内存成功时返回对象类型的指针,而malloc返回void指针,需要进行类型转换。
在分配失败时,new会抛出bad_alloc
异常,而malloc则返回NULL。new会调用operator new分配内存,并调用构造函数初始化对象,而delete会调用析构函数,然后调用operator delete释放内存。malloc和free只能动态申请和释放内存,无法进行自定义类型的构造和析构工作。
C++允许重载new和delete操作符,而malloc不允许重载。new操作符从自由存储区(free store)上分配内存,而malloc函数从堆上分配内存。自由存储区是new操作符的一个抽象概念,而堆是操作系统维护的特殊内存区域,用于程序的内存动态分配。自由存储区并不等同于堆,因为通过new操作符分配的内存不一定位于堆中。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
