我想找到一种方法来剖析我在prolog中编写的谓词(巨大的)的内存使用情况。我目前正在运行它swi和yap,我可以从这些进程看到内存消耗,一大块内存得到分配。Prolog内存问题
的问题是,当谓语终止它不会收集解除分配/释放/垃圾(我不得不停止解释看回)加的内存量只保留增长谓词运行时(无论如何,因为尾递归优化应该可以缓解这个问题,我想,在每次迭代中)。
有没有一种方法来发现增加使用的内存和检查是否有效地调用尾递归优化的子调度/调用?
任何其他建议如何优化问题将非常感激。如果这些是必要的,我会给出更多关于谓词的细节。
感谢您发现最后一次通话优化的提示。检查非优化代码的简单和手动方法是在每个循环中调用prolog_current_frame/1。我看到这个谓词也被yap识别,但它的值有时会发生变化(它与添加的剪辑不同,因此我认为它不可靠)(我现在正在运行它来检查内存消耗量它会需要1小时:)) – rano 2013-04-04 14:41:33
基本上我正在做一些ILP工作,从一个大文件加载~7000个例子(每个500个字面小节子句)并对我当前最好的假设进行概括/细化,以解释它们。我大量使用关联列表并在每次迭代中创建/处理长列表。 – rano 2013-04-04 14:46:11
@rano这确实是我的意思,每个周期调用'prolog_current_frame(Frame)',_Frame_不应该改变是执行尾部优化。我不知道这是否适用于YAP。 – 2013-04-04 15:04:31