在过去的几天里,除了标准的 malloc()
之外,我还获得了一些关于内存分配器的信息。对于具有多线程的应用程序,有些实现似乎比 malloc()
好得多。例如,tcmalloc
和 ptmalloc
似乎有更好的性能。
我有一个 C++ 应用程序,它在许多地方同时使用 malloc
和 new
运算符。我认为用 ptmalloc
之类的东西替换它们可能会提高其性能。但我想知道 new
运算符在 Linux 上运行的 C++ 应用程序中使用时如何操作?它是否使用 malloc
或其他东西的标准行为?
用代码中的旧内存分配器替换新
内存分配器的最佳方法是什么?有没有什么方法可以覆盖 new
和 malloc
的行为,或者我是否需要一一替换对它们的所有调用?
最佳答案
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/