2010-03-10 30 views
2

我知道,除了在HP-UX link text和Windows XP Low-fragmentation Heap上处理大量小块分配外,用户应用程序还有一个分配器。在HP-UX上,可以调整分配器,在Windows XP上它认为块的大小小于16 K。Linux(或RedHat Linux)上的小块分配器可避免内存碎片

我的问题是,我找不到任何有关在Linux上运行的用户程序(实际上是RedHat Linux)的这种分配器的信息。如果有这样的分配器,我实际上希望找到它可以处理的最大块大小。


更新
我发现jemalloc( http://www.canonware.com/jemalloc/)。它处理小型,大型和巨大的块: http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#size_classes

回答

3

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

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

1

这是一个通用的分配器,但Hoard heap号称具有“对碎片严格界限” [1]

所有的超级块是相同尺寸 类。通过使用除b之外的幂级别(其中b 大于1)并将请求的大小四舍五入到最接近的大小级别,我们将块内的最坏情况内部碎片限制为因子b。为了减少外部碎片, 我们回收完全空白的超级块以供任何大小的 类重新使用。

不知道是否有帮助,但很容易就可以试用。

+0

它不是一个默认的分配器,但在用Hoard分配器测试我的应用程序后,我发现它消耗了17%的内存并且运行速度更快。谢谢! – 2010-03-10 10:08:59