代码之家  ›  专栏  ›  技术社区  ›  Sergey Kurenkov

Linux(或Redhat Linux)上的小块分配器,以避免内存碎片化

  •  2
  • Sergey Kurenkov  · 技术社区  · 15 年前

    我知道在HP-UX上有一个用户应用程序的分配器,它可以处理许多小的块分配。 link text 在Windows XP上 Low-fragmentation Heap . 在HP-UX上可以调整分配器,在Windows XP上,它认为小于16K的块很小。

    我的问题是,我找不到关于在Linux上运行的用户程序(实际上是RedhatLinux)的这种分配器的任何信息。如果有这样一个分配器,我实际上想知道它能处理的最大块大小。


    更新
    我找到了杰马尔洛( http://www.canonware.com/jemalloc/ )它可以处理小、大和大的块: http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#size_classes .
    4 回复  |  直到 9 年前
        1
  •  3
  •   vprajan    15 年前

    Redhat Linux或任何基于Linux的发行版大多使用dl malloc( http://gee.cs.oswego.edu/dl/html/malloc.html )

    对于用户应用程序,如Kirill指出的那样,如果碎片更多地是因为更小的块,那么最好使用单独的内存分配器。

    如果用户应用程序很小,可以尝试使用C++布局NeX/Delphi,它可以重写默认分配器模式。( http://en.wikipedia.org/wiki/Placement_syntax )

        2
  •  3
  •   Kirill V. Lyadvinsky    15 年前

    作为平台独立的解决方案尝试 Boost.Pool 图书馆。它有 pool 可以处理任何大小的块的接口。您也可以使用 pool_alloc 满足标准分配器的要求。

    作为平台特定的解决方案,您可以尝试 mallopt 来自glibc库的函数。但据我所知,这对小街区没有帮助。

        3
  •  1
  •   HostileFork says dont trust SE    15 年前

    它是一个通用的分配器,但是 Hoard heap 声称“对碎片有严格的限制” [1] :

    超级块中的所有块大小相同 班级。通过使用大小为b的幂的类(其中b 大于1)并将请求的大小四舍五入到最接近的大小类,我们将最坏情况的内部碎片绑定到 一个块的系数为b。为了减少外部碎片, 我们回收完全空的超级块,以供任何规模的重复使用。 班级。

    不知道是否会有帮助,但很容易尝试一下。

        4
  •  0
  •   Sergey Kurenkov    14 年前

    TCMalloc:Thread-Caching Malloc

    对于默认的Linux分配器,已经找到了一个很好的替代方法。