使用tcmalloc/jemalloc与自定义内存池管理器

10

我想使用高性能通用分配器,例如jemalloc/tcmalloc与内存池一起使用。是否有相关指南?我不想将jemalloc/tcmalloc作为malloc的替代品。

我有一个使用libarena的内存池,可以切割一个较大的内存区域(2GB)。我想在这个内存池上创建一个固定大小对象池,如gslice,大小为1GB(类似于Bonwick Slab Allocator),并希望将其余的内存用于可变大小的通用分配。我想让jemalloc/tcmalloc使用这个内存区域。这可能吗?如果有其他替代库,我也想了解。


2
祝你好运,希望能得到答案。我也非常想知道这个问题的答案,请查看我的https://dev59.com/B3_aa4cB1Zd3GeqPzSns自己的问题。 - Vality
我为我们的应用程序编写了一个专门的分配器。其中一个非常巧妙的想法是将所有可能的分配都缩减到少量的“量子”大小。小于4k = 8字节,4k..16k = 16字节...最大可达64mb。最终只有大约1000个不同的尺寸,一直到64 MB。浪费的内存很少,因为浪费空间的大小是分配大小的函数。这允许每个大小的回收堆栈。释放只是一个推送,分配是一个弹出,除非该大小的堆栈为空。 - johnnycrash
我没有一个答案给你,但你可能会在这个jemalloc线程上找到一些有用的信息,关于为自定义分配器分配内存作为额外竞技场的问题:http://www.canonware.com/pipermail/jemalloc-discuss/2015-January/000988.html - acanaday
1个回答

8
这是一个旧问题,但至少在jemalloc方面已经有了积极的答案。自从jemalloc 4.0.0版本以来,您可以使用mallctl通过arena.<i>.chunk_hooks接口设置分块分配获取内存的钩子。这些钩子在jemalloc manpage中有很好的文档,包括一些交叉引用。
我不知道tcmalloc中是否有类似的接口;我没有使用它。
我最近回答了一个类似的问题; 那里可能有有用的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接