如何将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先前指出的风险。