0

我刚刚听说,C++ 有两种内存块,可以在运行时分配和释放。据说,“malloc”和“free”使用称为Free Memory Space的内存,“new”和“delete”使用Heap

好吧,我想知道 Free Memory Space 和 Heap 有什么区别?

C++ 的operator new的底层实现是否依赖于 C 的 malloc?

如果“new”和“malloc”确实使用了不同的内存块,那么编译器是否有必要为这两种块(分别)保留一定数量的内存,以防止“new”分配的内存和“new”分配的内存重叠的“malloc”?

4

2 回答 2

0

从哪里分配内存取决于实现和库。C++ 语言没有指定它。

负责 malloc/free 和 new/delete 使用的低级分配的底层库通常(如果不总是)相同。

它分配的内存通常来自heap或 using mmap

于 2013-09-07T08:26:56.437 回答
0

new 和 malloc 最终都从内核请求内存块,因此没有“特定内存区域”供另一个无法使用。但是,当您使用 delete 或 free 释放内存时,代码需要进行一些检查并将块正确释放回内核。

差异来自会计。例如,一个问题是如何处理非常小的分配。即你不想请求内核内存块只是为了存储一个布尔值。有一些优化可以有效地工作,并且 malloc 和 new 之间的优化是不同的。

于 2013-09-07T10:05:21.667 回答