自由记忆空间和堆

时间:2013-09-07 07:53:55

标签: c++ memory

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

嗯,我想知道Free Memory Space和Heap之间的区别是什么?

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

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

2 个答案:

答案 0 :(得分:0)

从内部分配内存是依赖于实现和库。 C ++语言没有指定它。

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

由它分配的内存通常来自heap或使用mmap

答案 1 :(得分:0)

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

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