malloc钩子的目的是什么?

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

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

关于malloc钩子的GCC文档有一个很好的小例子,演示了每次调用分配函数时添加调试输出。

我不确定还有什么要告诉你的……那还不够理智吗?

一个非常简单的例子:假设您知道由分配号N(每次运行中的N相同)分配的内存总是泄露在您的代码中。 你可以设置一个钩子,然后在条件“分配数等于N”时放置一个断点。 一旦遇到该断点,您将检查调用堆栈并找出之后泄漏内存的原因。

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

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