【问题标题】:What is the purpose of malloc hooks?malloc 钩子的目的是什么?
【发布时间】:2011-05-05 11:22:06
【问题描述】:

使用 malloc 钩子的目的究竟是什么?而且我读过它用于内存分析等,但从未真正理解过。

【问题讨论】:

标签: c++ c malloc


【解决方案1】:

好吧,如果您可以挂钩分配函数的行为,那么您可以跟踪内存分配以进行分析和调试。

关于 malloc 钩子的 GCC 文档有 a nice little example 演示每次调用分配函数时添加调试输出。

我真的不知道还能告诉你什么……这还不够吗?

【讨论】:

  • 添加调试输出看起来很简单,但分析涉及跟踪所有内存分配和释放 - 您如何使用挂钩来做到这一点?
  • @Raj:完全一样?将信息输出到某个文件或数据存储中,并在程序执行后对其进行分析。
  • 好的。所以分配钩子只占分析过程的 10%,其余的由程序员(分析器)完成。我在想钩子会处理大部分的分析过程,并期望它们会更复杂。 - 谢谢。
  • @Raj:是的。大而聪明的分析器可能将它们全部包装到一个地方(我不知道任何人知道),但他们当然不必这样做。特别是,回想一下 GNU 分析器,例如,通过分析器本身运行数据是执行后的一个附加步骤 (gprof)。在程序执行期间,钩子只是记录信息并输出到文件。
【解决方案2】:

一个非常简单的例子:假设您知道分配号 N 分配的内存(N 在每次运行中都相同)总是在您的代码中泄漏。您可以set a hook 并在“分配数等于 N”的条件下放置一个断点。一旦命中该断点,您将检查调用堆栈并找出稍后泄漏该内存的确切原因。

【讨论】:

    【解决方案3】:

    这是一种确保您的应用程序没有泄漏内存的简单方法。如果它必须在内存有限的环境中运行很长时间,这可能非常重要。您可以在测试时使用它,并在发布版本中将其关闭。

    【讨论】:

      【解决方案4】:

      它们也可以用来完全替换分配器,例如使用 umem 或 boehm-gc 进行测试或因为它对特定应用程序更有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-11
        • 2011-08-21
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        相关资源
        最近更新 更多