我想通过使用 malloc 和 free 挂钩来监控应用程序中 malloc 和 free 的使用。
这是文档http://www.gnu.org/s/libc/manual/html_node/Hooks-for-Malloc.html
从示例页面中,您可以看到my_malloc_hook
在重新调用 malloc 之前暂时关闭 malloc 挂钩(或切换到链中的前一个挂钩)。
这是监控多线程应用程序时的一个问题(请参阅问题末尾的解释)。
我在网上找到的其他使用 malloc 钩子的例子也有同样的问题。
有没有办法重新编写此函数以在多线程应用程序中正常工作?
例如,是否有一个内部 libc 函数可供 malloc 钩子调用来完成分配,而无需停用我的钩子。
由于公司法律政策,我无法查看 libc 源代码,因此答案可能很明显。
我的设计规范说我不能用不同的 malloc 设计替换 malloc。
我可以假设没有其他钩子在起作用。
更新
由于在服务 malloc 时 malloc 钩子被暂时删除,另一个线程可能会调用 malloc 并没有得到钩子。
有人建议 malloc 在它周围有一个大锁来防止这种情况发生,但它没有记录在案,而且我有效地递归调用 malloc 的事实表明任何锁必须在钩子之后存在,或者非常聪明:
caller ->
malloc ->
malloc-hook (disables hook) ->
malloc -> # possible hazard starts here
malloc_internals
malloc <-
malloc-hook (enables hook) <-
malloc
caller