c++ - 在现有代码中替换新内存分配器的最佳解决方案是什么?

标签 c++ linux memory-management

在过去的几天里,除了标准的 malloc() 之外,我还获得了一些关于内存分配器的信息。对于具有多线程的应用程序,有些实现似乎比 malloc() 好得多。例如,tcmallocptmalloc 似乎有更好的性能。

我有一个 C++ 应用程序,它在许多地方同时使用 mallocnew 运算符。我认为用 ptmalloc 之类的东西替换它们可能会提高其性能。但我想知道 new 运算符在 Linux 上运行的 C++ 应用程序中使用时如何操作?它是否使用 malloc 或其他东西的标准行为?

用代码中的旧内存分配器替换 内存分配器的最佳方法是什么?有没有什么方法可以覆盖 newmalloc 的行为,或者我是否需要一一替换对它们的所有调用?

最佳答案

来自TCMalloc documentation :

To use TCmalloc, just link tcmalloc into your application via the "-ltcmalloc" linker flag. You can use tcmalloc in applications you didn't compile yourself, by using LD_PRELOAD:

$ LD_PRELOAD="/usr/lib/libtcmalloc.so"

ptmalloc 看起来很相似(但如果您使用的是 Linux,您可能已经在使用它 because it's part of the GNU C library )。

我希望 operator new调用malloc , 但您可以通过在 malloc 上设置断点轻松地自行检查, 然后调用 new .如果你的new不打电话 malloc , you can redefine it so that it does .

关于c++ - 在现有代码中替换新内存分配器的最佳解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519772/

相关文章:

c++ - 如何高效生成Zipf分布数?

c++ - 变量模板可以变异吗?

c++ - 在 C++ 中, `var << ifstream` 与 `ifstream >> var` 相同吗?

linux - 如何ssh运行tail然后将数据发送到mysql数据库

c - 如何找到线程运行的处理器编号?

c++ - 是否可以为模板化类型专门化模板?

linux - 如何在Linux上启动停止worklight server 6.2?

linux - Unix 通配符扩展/正则表达式

iphone - 内存泄漏导致应用崩溃

c++ - 删除谁的责任