首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在现有代码中替换新内存分配器的最佳解决方案是什么?

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

Stack Overflow用户
提问于 2009-10-05 20:23:15
回答 4查看 2.4K关注 0票数 7

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

我有一个在许多地方同时使用mallocnew运算符的C++应用程序。我认为用像ptmalloc这样的东西来代替它们可能会提高它的性能。但是我想知道当在Linux上运行的C++应用程序中使用new操作符时,它的作用是什么?它使用的是malloc的标准行为还是其他什么?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-05 12:31:34

TCMalloc documentation

要使用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

票数 2
EN

Stack Overflow用户

发布于 2009-10-05 19:12:29

如果你的程序是多线程的,那么Hoard分配器是非常重要的。我个人认为在Linux上不值得这么麻烦,因为glibcptmalloc已经相当不错了。

票数 1
EN

Stack Overflow用户

发布于 2009-10-05 12:30:00

我认为覆盖绝对是可能的。您只需将您的应用程序与您想要的新实现库相链接,所有对new,malloc的调用都将被覆盖。我没有这样做过。但我猜测这是可能的,因为当使用valgrind时,它使用自己的内存分配器来跟踪应用程序的内存使用统计信息,并最终产生结果。因此,如果可以,肯定应该有一种方法。

检查此link。它包含有关类似类型的smartheap库的信息!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1519772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档