如何将 C++ STL 容器与 jemalloc(或任何其他 malloc
实现)一起使用?
是不是像include jemalloc/jemalloc.h
那么简单?或者我应该为他们写一个分配器吗?
编辑:我正在处理的应用程序在其生命周期内分配和释放相对较小的对象。我想要替换默认分配器,因为基准测试显示应用程序不会扩展到超过 2 个内核。分析显示它正在等待内存分配,这就是导致缩放问题的原因。据我了解,jemalloc
将对此有所帮助。
我希望看到一个平台中立的解决方案,因为应用程序必须在 Linux 和 Windows 上运行。 (在 Linux 下链接不同的实现很容易,但据我所知在 Windows 上很难。)
最佳答案
C++ 允许您replace operator new
。如果这个替换 operator new
调用 je_malloc
,那么 std::allocator
将间接调用 je_malloc
,然后所有标准容器将。
这是迄今为止最简单的方法。编写自定义分配器需要编写整个类。替换 malloc
可能还不够(不能保证未替换的 operator new
调用 malloc
),并且它具有前面提到的风险阿德里安·麦卡锡
关于带有 jemalloc 的 C++ STL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521226/