我想在C++中使用更快的内存分配器。由于许可/成本,我无法使用Hoard。我在单线程设置中使用了NEDMalloc并获得了很好的性能,但是我想知道是否应该切换到别的东西 - 据我了解,NEDMalloc仅仅是基于C的malloc()的替代品()& free(), 不是基于C++的新的&删除操作符(我广泛使用)。Boost :: Mutex&Malloc
问题是我现在需要线程安全,所以我试图malloc一个引用计数的对象(以防止过度复制),但其中还包含一个互斥量指针。这样,如果你要删除最后一个副本,你首先需要锁定指针,然后释放该对象,最后解锁&免费的互斥锁。
但是,使用malloc创建boost :: mutex似乎不可能,因为我无法将私有对象初始化为直接调用构造函数ist verboten。
所以我留下了这种奇怪的情况,我用新来分配锁和nedmalloc分配一切。但是当我分配大量内存时,我遇到了分配错误(当我切换到malloc而不是nedmalloc时,它会消失 - 但性能很糟糕)。我的猜测是,这是由于内存中的碎片化以及nedmalloc和new的兼容性不佳而导致的。
必须有更好的解决方案。你会建议什么?
你可以使用placement new直接调用构造函数。 – 2010-06-14 19:52:37