我目前正在评估一些可扩展的内存分配器,即 nedmalloc 和 ptmalloc(两者都构建在 dlmalloc 之上),作为默认 malloc / new 的替代品,因为在多线程环境中出现了严重的争用。他们公开的表现似乎不错,但我想看看其他真正使用过它们的人的体验如何。
- 您的绩效目标是否得到满足?
- 您是否遇到过任何意外或难以解决的问题(例如堆损坏)?
- 如果您尝试过 ptmaalloc 和 nedmalloc,您会推荐哪一个?为什么(易用性、性能)?
- 或者您可能会推荐另一个可扩展的分配器(免费且有许可的优先)?
我已经在我们的应用程序中实现了 NedMalloc,并且我对结果非常满意。我之前看到的争用已经消失了,分配器很容易插入,甚至总体性能也非常好,到目前为止,应用程序的内存分配开销现在几乎无法测量。
我没有尝试 ptmalloc,因为我没有找到它的 Windows 就绪版本,而且一旦 NedMalloc 对我来说工作得很好,我就失去了动力。
除了提到的两个之外,我认为尝试一下也可能很有趣TCMalloc- 它具有一些理论上听起来比 NedMalloc 更好的功能(例如,与 NedMalloc 使用的 4 B 标头相比,小分配的开销非常小),但是,由于它似乎没有准备好 Windows 端口,因此它也可能变得不可用非常简单。
使用 NedMalloc 几周后,我被迫放弃它,因为事实证明它的空间开销对我们来说太高了。尤其令我们震惊的是,NedMalloc 似乎正在以一种糟糕的方式回收操作系统不再使用的内存,但仍保留大部分内存。现在我已将其替换为JEMalloc,看起来没有那么快(它仍然很快,但不如 NedMalloc 快),但这种方式非常健壮,可扩展性也很好。
使用 JEMalloc 几个月后,我转向了 TCMalloc。与其他的相比,它需要花费更多的精力来适应 Windows,但它的结果(性能和碎片)似乎是我迄今为止测试过的最好的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)