在现有代码中replace新内存分配器的最佳解决scheme是什么?

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

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

在代码中用旧代码replacenew内存分配器的最好方法是什么? 有没有什么办法来覆盖的行为或new malloc或我是否需要逐一replace所有的电话?

Solutions Collecting From Web of "在现有代码中replace新内存分配器的最佳解决scheme是什么?"

从TCMalloc文档 :

要使用TCmalloc,只需通过“-ltcmalloc”链接器标志将tcmalloc链接到您的应用程序。 您可以使用LD_PRELOAD在您自己编译的应用程序中使用tcmalloc:

$ LD_PRELOAD =“/ usr / lib / libtcmalloc.so”

ptmalloc似乎是相似的(但如果你在Linux上,你可能已经在使用它, 因为它是GNU C库的一部分 )。

我希望operator new可以调用malloc ,但是你可以通过在malloc上设置断点,然后调用new来轻松地检查自己。 如果你的new不调用malloc , 你可以重新定义它,这样做 。

如果你的程序是多线程的,那么Hoard的分配器是非常重视的。 我个人不认为在Linux上这是值得的,因为glibc的ptmalloc已经很不错了。

我认为骑马绝对有可能。 您可以将您的应用程序与所需的新实现库链接起来,所有对新的malloc的调用都将被重写。 我没有那样做。 但我猜测它的可能性,因为在使用valgrind时,它使用自己的内存分配器来跟踪应用程序的内存使用情况统计信息,并最终产生结果。 所以如果可以的话,肯定应该有办法。

检查这个链接 。 它包含有关类似类型的smartheap库的信息!

你的应用在内存分配上花了多少时间?