代码之家  ›  专栏  ›  技术社区  ›  f4nt

(c)最常用的堆策略是什么?

  •  1
  • f4nt  · 技术社区  · 6 年前

    我听说“更好的合身”是很常用的,但我似乎没有在网上看到太多关于它的信息。堆分配器使用的最常用/被认为是最有效的策略是什么?

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

    编辑: 我还特别关注“更适合”的堆策略和DougLea的策略( http://gee.cs.oswego.edu/dl/html/malloc.html )比较。Doug使用了一种最适合的类型,但是他的方法使用索引箱,而BetterFit使用笛卡尔树。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Sudhanshu    15 年前

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

    freebsd使用一个新的多线程内存分配器 杰莫洛克 设计为并发和线程安全,在当今多核系统中使用时提供了良好的性能特性。可以找到旧malloc和新的多线程malloc的比较 here . 即使它是多线程的,它仍然使用不同大小的块的概念来根据对象的大小容纳对象(最接近对象大小的块用于分配对象)。

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

    正如您所注意到的,上面的bin/chunks/slab缓存只是 最佳拟合 算法。因此,您可以很容易地假设“最佳匹配”算法是使用最广泛的malloc算法之一(尽管内存分配器在其他重要方面有所不同)。

    推荐文章