我们遇到了一些与似乎是内存泄漏相关的问题。我们将上下文与引用计数垃圾收集结合使用。以下是对这种情况的简短描述:
通过对最新的不稳定的ScalaZ3,我们创建了大量的重新计算上下文(400-500),在这些上下文上,我们减少了求解器(<5),检查了几个公式,然后删除了所有内容。在删除上下文之前,我们尝试对所有内容执行del-ref。我们看到的是内存占用不断增加(高达几Gb),即使我们一次只使用5或6个新的和小的上下文。
1)当上下文被删除时,Z3是否释放上下文中所有对象的内存?(即使是那些refcount >0的对象)如果不是,原因可能是我们忘记了对几个对象执行del-ref操作。
2)您是否有任何工具/提示可以帮助我们跟踪内存中的剩余内容。也许是在open_log生成的文件之上的一些东西?或者在gcc下回放日志的时候去哪里看?
谢谢!
发布于 2013-06-21 23:59:15
1)当上下文被删除时,Z3会释放一些内存,但我们不能保证当引用计数器未被正确使用时,所有内存都会被删除。
2)我通常使用Valgrind来跟踪内存泄漏。我认为这是令人惊讶的。我们可以在z3.log文件中创建执行日志,然后执行
valgrind z3 z3.log顺便说一句,在调试模式下编译也可能会有所帮助。在调试模式下,当上下文被删除时,Z3还将报告仍然有效的AST的列表。
https://stackoverflow.com/questions/17235412
复制相似问题