2010-03-10 35 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