我正在尝试在 C++ 中使用更快的内存分配器。由于许可/成本,我无法使用 Hoard。我在单线程设置中使用 NEDMalloc 并获得了出色的性能,但我想知道是否应该切换到其他东西——据我了解,NEDMalloc 只是基于 C 的 malloc() 和 free() 的替代品,不是基于 C++ 的 new & delete 运算符(我广泛使用)。
问题是我现在需要是线程安全的,所以我试图 malloc 一个引用计数的对象(以防止过度复制),但它也包含一个互斥指针。这样,如果您要删除最后一个副本,您首先需要锁定指针,然后释放对象,最后解锁并释放互斥锁。
但是,使用 malloc 创建 boost::mutex 似乎是不可能的,因为我无法将私有对象初始化为直接调用构造函数。
所以我遇到了这种奇怪的情况,我使用 new 分配锁,使用 nedmalloc 分配其他所有内容。但是当我分配大量内存时,我遇到了分配错误(当我切换到 malloc 而不是 nedmalloc 时消失了〜但性能很糟糕)。我的猜测是,这是由于内存碎片以及 nedmalloc 和 new 无法并排放置 nice 造成的。
必须有更好的解决方案。你有什么建议?