我想找到一種方法來剖析我在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