跟踪z3内存泄漏

时间:2013-06-21 12:37:24

标签: z3

我们遇到了一些与内存泄漏相关的问题。我们正在使用带有ref-counting垃圾收集的上下文。以下是对情况的简短描述:

通过最新的不稳定的ScalaZ3,我们创建了许多重新计算上下文(400-500),我们很少有求解器(< 5),检查几个公式,然后删除所有内容。我们尝试在删除上下文本身之前对所有内容进行del-ref。我们目睹的是内存占用量不断增加(高达几Gb),即使我们一次只使用5或6个新鲜和小的上下文。

1)当上下文被删除时,Z3是否释放了上下文中所有对象的内存? (即使是那些refcount> 0的人)如果没有,原因可能是我们忘了对几个对象进行del-ref。

2)您是否有任何工具/提示可以帮助我们追踪记忆中剩余的内容。也许在open_log生成的文件之上?或者在gcc下重播日志时的位置?

谢谢!

1 个答案:

答案 0 :(得分:3)

1)当删除上下文时,Z3将释放部分内存,但我们无法保证在未正确使用引用计数器时将删除所有内存。

2)我通常使用Valgrind来跟踪内存泄漏。我觉得很棒。我们可以在文件z3.log中创建执行日志,然后执行

       valgrind z3 z3.log

BTW,在调试模式下编译也可能有所帮助。在调试模式下,Z3还将报告删除上下文时仍处于活动状态的AST列表。

相关问题