【问题标题】:(C) which heap policies are most often used?(C) 最常使用哪些堆策略?
【发布时间】:2011-02-26 04:36:15
【问题描述】:

我听说'better-fit' 很常用,但我似乎没有在网上读到太多关于它的信息。堆分配器使用的最常用/被认为最有效的策略是什么。

(我承认我的词汇可能有缺陷;当我说“政策”时,我的意思是“最适合”、“第一次适合”、“下一次适合”等)

编辑:我还对“更适合”的堆策略和 doug lea 的策略 (http://gee.cs.oswego.edu/dl/html/malloc.html) 的比较特别感兴趣。 Doug 使用一种最佳拟合,但他的方法使用索引箱,而更好的拟合使用笛卡尔树。

【问题讨论】:

  • 所有问题中的 (c) 是什么意思?
  • 我在 C 中工作。如果我在 python 中编写相关材料,我会放 (python)。抱歉,如果这令人困惑。
  • 通常只用适当的语言标签标记您的问题就足够了。

标签: c heapalloc policies


【解决方案1】:

C编程环境使用操作系统自带的标准C库提供的malloc实现Doug Lea's memory allocator中的概念(称为dlmalloc)在大多数内存分配器中使用最为广泛UNIX 系统上的一种或另一种形式。 dlmalloc 使用不同大小的 bin 来容纳对象 - 最接近对象大小的 bin 用于分配对象。

FreeBSD 使用一种名为 jemalloc 的新的多线程内存分配器,旨在实现并发和线程安全,在当今的多核系统中使用时提供良好的性能特征。可以在here 找到旧的 malloc 和新的多线程的比较。即使它是多线程的,它仍然使用不同大小的块的概念来根据对象的大小来容纳对象(最接近对象大小的块用于分配对象)。

在 UNIX 内核中,最流行的内存分配器是 slab 分配器,它是由 Sun Microsystems 引入的。 slab allocator 使用称为平板的大块内存。这些slab在不同大小的对象(或池)的缓存中划分。每个对象都是从包含与其大小最接近的对象的缓存中分配的。

如您所见,上述 bin/chunks/slab 缓存只是 best fit 算法的一种形式。因此,您可以轻松假设“最佳匹配”算法是使用最广泛的 malloc 算法之一(尽管内存分配器在其他重要方面有所不同)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2012-01-26
    • 2022-10-05
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2010-10-16
    相关资源
    最近更新 更多