如何将C++ STL容器与jemalloc(或任何其他malloc实现)一起使用?

它像include jemalloc/jemalloc.h一样简单吗?还是我应该为他们写一个分配器?

编辑:我正在使用的应用程序在其生命周期内分配并释放相对较小的对象。我想替换默认的分配器,因为基准测试表明该应用程序不能扩展到2个以上的内核。分析表明它正在等待内存分配,这就是导致扩展问题的原因。据我了解,jemalloc将对此有所帮助。

我想看到一个解决方案,该解决方案与平台无关,因为该应用程序必须在Linux和Windows上均可工作。 (在Linux下,与其他实现的链接很容易,但据我所知,在Windows上很难。)

最佳答案

C++允许您用替换 operator new。如果此替换operator new调用je_malloc,则std::allocator将间接调用je_malloc,所有标准容器也将依次调用。

到目前为止,这是最简单的方法。编写自定义分配器需要编写整个类。替换malloc可能还不够(无法保证未替换的operator new会调用malloc),并且它具有Adrian McCarthy先前指出的风险。

08-16 03:11