2013-06-05 43 views
8

我想使用一個高性能的通用分配器,如帶內存池的jemalloc/tcmalloc。有這樣的指導嗎?我不想用jemalloc/tcmalloc作爲malloc的直接替代品。使用tcmalloc/jemalloc自定義內存池管理器

我有內存池,使用libarena和雕刻一個大的內存區域(2GB)。我想創建固定大小的對象池,如gslice在這個競技場說1 GB。 (如Bonwick板分配器)並且想要將其餘內存用於可變大小的通用分配。我想有jemalloc/tcmalloc使用這個內存區域。這可能嗎?任何想法如何我可以繼續?如果有一個替代圖書館,我想也聽說它。

+1

祝你好運得到這個答案,我也真的想這個答案,請參閱我自己的http://stackoverflow.com/questions/23341587/malloc-like-function-using-custom-heap自己的問題。 – Vality

+0

我爲我們的應用專門編寫了一個分配器。結果是一個真正漂亮的想法是將所有可能的分配減少到少量「量子」尺寸的概念。低於4k = 8字節,4k..16k = 16字節...最高可達64mb。我最終只有大約1000種不同的尺寸,一直到64 MB。由於浪費空間的大小是分配規模的函數,浪費的公羊很低。這允許每種尺寸的回收樁。一個免費只是一個推動,一個分配是一個流行音樂,除非這個音量是空的。 – johnnycrash

+0

我沒有給你答案,但你可以在這個jemalloc線程上找到一些有用的信息,關於在這裏爲自定義分配器分配內存作爲額外的領域:http://www.canonware.com/pipermail/jemalloc-discuss/2015 -January/000988.html – acanaday

回答

2

這是一個古老的問題,但最後有一個肯定的答案,至少在哪裏jemalloc有關。由於jemalloc版本4.0.0,您可以使用mallctl通過使用arena.<i>.chunk_hooks接口來設置分塊分配獲取內存的鉤子。這些掛鉤在jemalloc manpage中有詳細記錄,包括許多交叉引用。

我不知道tcmalloc中的任何類似接口;我不用這個。

我半回答了一個similar question;那裏也可能有有用的信息。

相關問題