带有 jemalloc 的 C++ STL

标签 c++ memory-management stl malloc

如何将 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/

相关文章:

C++ std::map 持有任何类型的值

c++ - 如何实现排队 map ?

c++ - 代码块无法创建输出目录

c++ - Dirent.h - 专门获取具有特定扩展名的文件的字符串

c++ - MinGW SEH 和 MinGW SJLJ 有什么区别?

c++ - 我如何在 CUDA 中正确使用全局内存?

c++ - 串口通讯崩溃

C - 释放动态分配的结构数组得到 'Invalid next size (fast)' 错误

java - JVM 垃圾收集突然占用大量 CPU

c++ - 何时使用 std::unordered_set 而不是 std::set?