当前位置: 首页 > 面试题库 >

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

元昊苍
2023-03-14
问题内容

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

我有一个在许多地方都使用mallocnew运算符的C
应用程序。我认为用类似的东西代替它们 ptmalloc可能会改善其性能。但是我想知道 new当在Linux上运行的C

应用程序中使用该运算符时会如何操作?它是否使用malloc或其他标准行为?

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


问题答案:

从TCMalloc文档中:

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

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

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

我希望operator new打个电话malloc,但是您可以通过在上设置一个断点malloc然后再打个电话来轻松地检查一下自己new。如果您new没有打电话malloc,您可以重新定义它以便打电话。



 类似资料:
  • 问题内容: 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django-openid-auth,似乎已经死了 django-authopenid django-socialauth(还提供对Twitter和Facebook帐户的身份验证) django-socialregistration(也具有Fa

  • 问题内容: 请注意 :这是一个古老的问题,带有古老的答案。现在大多数链接的应用程序都不再需要维护。这些天来,大多数人似乎都使用django- allauth 或python-social- auth 。为了后代的缘故,下面将完整保留原始问题。 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django

  • 问题内容: 我的应用程序是带有密集字符串处理的多线程。我们正在经历过多的内存消耗,并且性能分析表明这是由于String数据引起的。我认为使用某种flyweight模式实现甚至是缓存将极大地受益于内存消耗(我可以肯定Strings通常是重复的,尽管我在这方面没有任何硬数据)。 我看过Java常量池和String.intern,但似乎可以引发一些PermGen问题。 在Java中实现应用程序范围的多线

  • 问题内容: 我已经开发了一些类似于DAO的自定义类,以满足我的项目的一些非常特殊的要求,这是一个不在任何框架内运行的服务器端进程。 该解决方案非常有效,除了每次发出新请求时,我都会通过MySQLdb.connect打开一个新连接。 将其切换为在python中使用连接池的最佳“插入”解决方案是什么?我在想像Java的通用DBCP解决方案。 该过程运行很长时间,并且有许多线程需要发出请求,但不是所有线

  • 问题内容: 我们构建3层企业解决方案,通常由几个webapp和ejbjar模块组成,这些模块都与​​数据库通信并具有多个外部集成点。 每个模块通常需要自己的配置,这些配置可以在解决方案的生命周期内进行更改。部署它成为一场噩梦,因为现在我们必须记住18个属性文件以进行复制和配置,还需要设置数据源,队列,内存需求等。 我希望但不能乐观地找到更好的方法。我们考虑/使用过的一些选项,各有其优缺点: 使用多

  • 我在一本书中发现了一个“用餐哲学家问题”的替代解决方案,用Java编写: 解决方案的文本是: 或者,我们可以给筷子贴上从e到N-1的标签。每个哲学家都试图先拿起编号较低的筷子。这基本上意味着每个哲学家都会先选择左边的筷子,再选择右边的筷子(假设你是这样给它贴标签的),除了最后一位哲学家会选择相反的方式。有了这个解决方案,哲学家不可能拿着大筷子而不拿着小筷子。这就阻止了循环的能力,因为循环意味着较高