Rob*_*uld 35 c c++ memory malloc allocation
我目前有大量的多线程服务器应用程序,我正在四处寻找一个好的多线程内存分配器.
到目前为止,我被撕裂了:
从我发现的囤积可能是最快的,但我在今天之前没有听说过,所以我怀疑它是否真的像它看起来那么好.任何人都有尝试这些分配器的个人经验?
str*_*dim 11
真正告诉哪个内存分配器适合您的应用程序的唯一方法是尝试一些.提到的所有分配器都是由聪明的人写的,并且会在一个特定的微基准或其他微基准上击败其他分配器.如果你的所有应用程序一整天都在线程A中的malloc一个8字节块并在线程B中释放它,并且根本不需要处理其他任何东西,你可能会编写一个内存分配器来击败任何一个到目前为止列出的那些 它对其他很多东西都没有用.:)
我在工作中使用Hoard有一些经验(足以使最近3.8版本中解决的一个较为模糊的错误是由于这种经历而发现的).这是一个非常好的分配器 - 但对你来说有多好,取决于你的工作量.你必须支付Hoard(虽然它不是太贵),以便在没有GPL代码的商业项目中使用它.
一个非常适应的ptmalloc2已经成为glibc malloc背后的分配器已经有一段时间了,所以它的使用和测试都非常广泛.如果稳定性在所有事情上都很重要,那么它可能是一个不错的选择,但你没有在列表中提及它,所以我认为它已经完成了.对于某些工作负载来说,这很糟糕 - 但任何通用的malloc都是如此.
如果您愿意为此付费(而且价格合理,根据我的经验),SmartHeap SMP也是一个不错的选择.提到的大多数其他分配器都设计为可以LD_PRELOAD'd的drop-in malloc/free new/delete替换.SmartHeap也可以这种方式使用,但它还包括一个完整的分配相关API,可让您根据心脏内容微调分配器.在我们已经完成的测试中(同样,非常特定于特定应用程序),SmartHeap与作为插入式malloc替换时的性能大致相同; 两者之间的真正区别在于定制程度.您可以获得更好的性能,而您需要分配器的通用性更低.
根据您的使用情况,通用多线程分配器可能根本不是您想要使用的; 如果你经常使用malloc并释放大小相同的对象,你可能只想编写一个简单的slab分配器.在Linux内核中适合该描述的几个地方使用了平板分配.(我会给你一些更有用的链接,但我是一个"新用户",而Stack Overflow已经决定不允许新用户在一个答案中提供太多帮助.但谷歌可以提供足够的帮助.)
归档时间: |
|
查看次数: |
13103 次 |
最近记录: |