我正在尝试寻找一个看起来像内存泄漏的服务器软件中的一个非常难以回避的错误,但memcheck根本没有帮助.我的猜测是,实例化并且从未删除的内存确实没有泄露,所以有一个引用,但现在对程序没用,应该删除.是否有一个工具可以计算内存中的访问而不是引用,因此评估堆中对象的有效使用情况?
我最终实现了自己的工具。\n我的方法与我的意图略有不同:我编写了一个malloc 挂钩库。它挂钩 malloc、realloc 和 free,并维护活动的 malloc 内存块的列表。每当您向应用程序发送 SIGUSR1 时,它都会将其信息转储到文件中,并将其计算为Mathematica表达式。Mathematica 笔记本最终提供了一些非常有用的图表:调用堆栈得分最高的实例化,以及对 malloc 调用的完整概述。有了这些工具,我只需将鼠标悬停在第二张图的最粗且距中心绿点最远的位置上,瞧\xc3\xa0,我就有了实例化未泄漏但无用内存负载的地址。
\n\nPS\n您在第二张图中看到的循环调用绝对是 libc\ 的 backtrace() 中的错误。
\n| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |