我知道有一个用户应用程序的分配器,而不是在HP-UX link text和Windows XP Low-fragmentation Heap上处理大量小块分配。在HP-UX上,可以调整分配器,在Windows XP上,它认为小于16 K的块大小。
我的问题是我找不到有关在Linux上运行的用户程序(实际上是RedHat Linux)的这种分配器的任何信息。如果有这样的分配器,我实际上想要找到它可以处理的最大块大小。
<小时/> 的更新
答案 0 :(得分:3)
作为独立于平台的解决方案,请尝试使用Boost.Pool库。它有pool
接口,可以处理任何大小的块。您也可以使用满足标准分配器要求的pool_alloc
。
作为特定于平台的解决方案,您可以尝试使用glibc库中的mallopt函数。但据我所知,它对小块无益。
答案 1 :(得分:3)
Redhat Linux或任何基于Linux的发行版主要使用DL-Malloc(http://gee.cs.oswego.edu/dl/html/malloc.html)。
对于Kirill指出的用户应用程序,如果因为较小的块而更多碎片,则最好使用单独的内存分配器。
如果用户应用程序很小,您可以尝试使用C ++ placement new / delete,它可以覆盖默认的分配器模式。 (http://en.wikipedia.org/wiki/Placement_syntax)
答案 2 :(得分:1)
这是一个通用的分配器,但Hoard heap声称对碎片有严格的限制[1]:
超级块中的所有块都具有相同的大小 类。通过使用b的幂的大小类(其中b 大于1)并将请求的大小舍入到最接近的大小类,我们将最坏情况内部碎片限制在其中 一个块到b的因子。为了减少外部碎片, 我们回收完全空的超级块以供任何尺寸的重复使用 类。
Dunno,如果它会有所帮助,但它很容易尝试。
答案 3 :(得分:0)
TCMalloc:Thread-Caching Malloc
找到了一个很好的替代方案,默认的Linux分配器。