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

通过最新不稳定的ScalaZ3,我们创建了很多重新计数的上下文(400-500),在这些上下文上我们很少求解器(
1) 当上下文被删除时,Z3 是否释放上下文中所有对象的内存? (即使是 refcount > 0 的那些)如果不是,原因可能是我们忘记了 del-ref 几个对象。

2)您是否有任何工具/提示可以帮助我们追踪内存中剩余的内容。也许是在 open_log 生成的文件之上的东西?或者在gcc下重放日志时在哪里看?

谢谢!

最佳答案

1)Z3会在上下文被删除时释放部分内存,但我们不保证当引用计数器没有正确使用时所有内存都会被删除。

2)我通常使用 Valgrind 来跟踪内存泄漏。我认为这是惊人的。我们可以在文件z3.log中创建执行的日志,然后执行

       valgrind z3 z3.log

顺便说一句,在 Debug模式下编译也可能有所帮助。在 Debug模式下,Z3 还会报告删除上下文时仍处于事件状态的 AST 列表。

关于z3 - 跟踪 z3 内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17235412/

10-13 04:35