2011-01-25 58 views
6

我需要一些快速,線程安全的內存池庫。 我google了很多,但快速的解決方案沒有線程安全性,而其他人真的很大。C:內存池庫?

有什麼建議嗎?

+0

爲什麼不只是malloc()?它太慢了?你有沒有嘗試一些線程池?它速度更快,但浪費了一些記憶。 –

+0

我有小塊(<500b)的malloc /免費每秒hundrends,所以是的,只是免費/ malloc真的很慢。我也想得到一些線程安全的解決方案,所以我不會在線程池頭管理頭痛。 – Daniel

+0

也考慮競技場內存管理。如果它適合你,它會快很多倍。 – Joshua

回答

7

兩個nedmalloc和ptmalloc看到的都是基於C線程緩存的內存管理器,根據各地Doug Lea的malloc的(大多數Linux分配器的核心)。他們都有良好的執照,不像囤積,這需要支付商業用途,最後我看了看。谷歌的tcmalloc也有C綁定iirc,並且從底層構建爲一個線程緩存分配器,以及一些內置的堆和cpu分析工具,但它是爲大量內存使用而構建的(他們給出的示例是每個線程300mb + ),因此許多小型應用程序的預期效果不佳

+0

謝謝! nedmalloc正是我一直在尋找的東西。 – Daniel

0

效果不錯,不應該那麼大。

+0

我已經嘗試過第一種方法,它真的很大+有太多的API我不會使用。 – Daniel

2

你應該爲每個線程使用一個內存池。

+2

請注意,雖然這可以提供幫助,但仍然存在需要注意的線程問題 - 雖然您可以確保將特定線程的分配指向特定的池,但您必須準備好從任何池釋放任何塊線。 –

+0

爲什麼我應該爲每個線程使用單獨的內存池? – Daniel

+0

這也可能導致一個線程競技場在其免費商店中保留數百兆內存,捱餓實際上需要分配內存的其他線程競技場 – Necrolis

0

你試過Hoard

從Intel.com

也是這些 two articles
+0

我已經看到它,但它似乎更像是一個破解現有應用程序(LD_PRELOAD),雖然我需要有一些控制池(大小,最大值,當前使用情況,等等......) – Daniel