在过去的几天里,我获得了一些关于标准malloc()
以外的内存分配器的信息。对于具有多个线程的应用程序,有一些实现似乎比malloc()
要好得多。例如,tcmalloc
和ptmalloc
似乎有更好的性能。
我有一个在许多地方同时使用malloc
和new
运算符的C++应用程序。我认为用像ptmalloc
这样的东西来代替它们可能会提高它的性能。但是我想知道当在Linux上运行的C++应用程序中使用new
操作符时,它的作用是什么?它使用的是malloc
的标准行为还是其他什么?
用代码中的旧内存分配器替换new
内存分配器的最佳方法是什么?有没有办法覆盖行为或new
和malloc
,或者我需要一个接一个地替换对它们的所有调用?
发布于 2009-10-05 04:31:34
要使用TCmalloc,只需通过"-ltcmalloc“链接器标志将
链接到您的应用程序中即可。通过使用LD_PRELOAD,您可以在不是自己编译的应用程序中使用tcmalloc:
$ 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。
发布于 2009-10-05 11:12:29
如果你的程序是多线程的,那么Hoard分配器是非常重要的。我个人认为在Linux上不值得这么麻烦,因为glibc
的ptmalloc
已经相当不错了。
发布于 2009-10-05 04:30:00
我认为覆盖绝对是可能的。您只需将您的应用程序与您想要的新实现库相链接,所有对new,malloc的调用都将被覆盖。我没有这样做过。但我猜测这是可能的,因为当使用valgrind时,它使用自己的内存分配器来跟踪应用程序的内存使用统计信息,并最终产生结果。因此,如果可以,肯定应该有一种方法。
检查此link。它包含有关类似类型的smartheap库的信息!
https://stackoverflow.com/questions/1519772
复制相似问题