我正在尝试在C++中使用更快的内存分配器。由于授权/费用,我无法使用Hoard。我在单线程设置中使用NEDMalloc并获得了出色的性能,但是我想知道是否应该切换到其他方式-据我所知,NEDMalloc只是基于C的malloc()和free()的替代品, 不是基于C++的new&delete运算符(我已广泛使用)。

问题是我现在需要线程安全,因此我正在尝试分配一个对象,该对象被引用计数(以防止过多复制),但该对象还包含一个互斥体指针。这样,如果要删除最后一个副本,则首先需要锁定指针,然后释放对象,最后解锁并释放互斥锁。

但是,使用malloc创建boost::mutex似乎是不可能的,因为我不能像直接调用构造函数那样初始化私有(private)对象。

因此,我处于这种奇怪的情况下,在这里我使用new来分配锁,而使用nedmalloc来分配其他所有东西。但是,当我分配大量内存时,会遇到分配错误(当我切换到malloc而不是nedmalloc〜时,错误消失了,但是性能很糟糕)。我的猜测是这是由于内存中的碎片以及nedmalloc和new无法并排放置的原因。

必须有一个更好的解决方案。你有什么建议?

最佳答案

Google的malloc replacement相当快,默认情况下是线程安全的,并且易于使用。只需将其链接到您的应用程序中,即可替换行为或malloc / freenew / delete。这使得重新配置您的应用程序以验证新的分配器实际上正在加速工作特别容易。

关于c++ - Boost::Mutex和Malloc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3039133/

10-09 05:18