2010-10-13 19 views
14

我找一些(自定義)內存管理器/分配器用C語言編寫,並通過一些文章去了, -C中的自定義內存分配器/管理器?哪種方法?

幾個環節:

我有使用任何可用的一個沙箱一個小型的web服務器,我有書面包裝的線程處理/分配方案沒有問題。 Apache WS使用內存池來處理內存,並且池不是持久性的,它是按請求的基礎。你們可以提出一些建議嗎?解決這個問題的一些好的/最好的方法?我的要求如下; -

  1. (有界響應時間)分配和重新分配在預先知道的,即一些 不變成本O(C),其中c爲常數 。從異構 分配/解除分配的大小或 序列

  2. 碎片應處理,我可以寫的模式/包裝以提供 相同。

真心感謝您的幫助和意見!從異構 分配/解除分配的大小或 序列

+0

我正在尋找類似的東西,我檢查了IBM網站,但他們顯示爲'malloc_init'是爲unix而且包含的庫不在windows中。我特別尋找一個函數來代替'sbrk()' - 從操作系統中找到最後一個有效的地址。 – frank17 2016-10-01 11:09:41

回答

2

碎片應處理,我可以 寫模式/包裝以提供 相同。

爲避免碎片化,您必須使用混合區塊分配策略。這裏的混合意味着不同大小的元素塊,而不是具有單個大小的元素塊,即分配器(或其周圍的包裝)應該維護不同大小的元素(小,中等等)的塊。所有的分配請求應該四捨五入到最近的塊邊界。該策略應確保您不會遭受外部碎片,但可能導致內部碎片。您可以在下面的鏈接的詳細信息:

http://www.cotsjournalonline.com/magazine/articles/view/101217/pg:2 http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf

1

只是爲了一個更添加到您的列表

Google Performance Tools

它顯着改善了內存分配性能,它具有CPU和內存分析器。 他們的Thread-Caching Malloc實現對於多線程應用程序來說意味着非常高效。

+0

謝謝!它看起來非常好。但有一個疑問,我可能是錯的,因爲垃圾收集,它會變成非實時的,我的意思是沒有「有限的響應時間」? – yadab 2010-10-27 03:24:48