讨论/《C++ 面试突击》 - new 和 malloc 的区别,delete 和 free 的区别/
《C++ 面试突击》 - new 和 malloc 的区别,delete 和 free 的区别
共 7 个回复

在c++中,new操作符是从堆内存上为对象动态分配内存,并使用delete释放;malloc函数是从自由存储区申请内存,并利用free函数释放。
请问是我搜索答案有误吗?

3

搜索了一下,感觉这个答案比较靠谱,供参考。
堆区和自由存储区的区别与联系:
(1)malloc申请的内存在堆上,使用free释放。new申请的内存在自由存储区,用delete释放
(2)堆(heap)是c语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当程序运行时调用malloc()时就会从中分配,调用free可把内存交换。而自由存储区是C++中通过new和delete动态分配和释放对象的抽象概念,通过new来申请的内存区域可称为自由存储区。基本上,所有的C++编译器默认用堆来实现自由存储区,也即是缺省的全局运算符new和delete也许会按照malloc和free的方式来实现,这时由new运算符分配的对象,说它在堆上也对,说它在自由存储区也对。
记住:
(1)堆是c语言和操作系统的术语,是操作系统维护的一块内存。自由存储是C++中通过new和delete动态分配和释放对象的抽象概念。
(2)new所申请的内存区域在C++中称为自由存储区,编译器用malloc和free实现new和delete操作符时,new申请的内存可以说是在堆上。
(3)堆和自由内存区有相同之处,但并不等价。

3

During interviews it's good to say that "new and delete use the free store, malloc and free use the heap; new and delete call the constructor and destructor, respectively, however malloc and free do not."
我在stackoverflow 上看到的是这个说法.

2

C++ Primer Plus(第六版) 中文版 第9章第321页中4.第一句说“通常,new负责在堆(heap)中找到一个足以能够满足要求的内存块。”

2

constructor deconstructor应该就是文章里的构造函数和析构函数吧

你搜错了吧?

没误