【问题标题】:Free Memory Space and Heap可用内存空间和堆
【发布时间】:2013-09-11 08:11:04
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c++ memory


【解决方案1】:

从哪里分配内存取决于实现和库。 C++ 语言没有具体说明。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • newmalloc 不一定向内核请求内存。根据请求的大小,在调用之前库可能已经请求了内存。 freedelete 不需要将内存释放回内核。这取决于实现。
    猜你喜欢
    • 2011-10-08
    • 2014-05-13
    • 2012-04-17
    • 2021-11-20
    • 2018-07-15
    • 1970-01-01
    • 2015-11-10
    • 2014-02-11
    相关资源
    最近更新 更多