任何对glibc malloc代码有一些基本想法的人都可以告诉我如何迭代所有竞技场并找出哪些是没有被释放的块,即它们的使用位被设置.我必须在退出流程时这样做.
要么
更确定的是,如果我们有一个竞技场,我们可以访问其中分配的第一个块吗?
感谢大家花时间回复.很长一段时间我发布了这个问题.'Phrack'在这些问题中列出了一些黑客技术.我受益于此.
问候,卡皮尔
所有主要的c代码分析器通常都有一些围绕malloc的包装器用于内存跟踪目的.如果不是类似的跟踪内存并使其独立于平台,您可能必须执行相同的操作.
这里有些例子:
您将不得不添加其他结构来存储已分配的内存引用,以便您可以返回并迭代它们.我想你会想要阅读与内存清理相关的算法.Mark N Sweep和Reference-Counting是目前使用的最流行的算法.JVM使用Mark N Sweep.您还必须研究强弱链接方案以及它们如何应用于GC.
否则,如果您想节省时间而不是编写自己的包装器,可以使用valgrind和gprof等工具来分析和评估内存使用情况.
老实说,我会看看Boehm-Demers-Weiser Garbage Collecter.它已经编写并基于广泛的研究.
刚刚注意到BDWGC搬到了GitHub.