我的应用程序将给定的数据转换为树表示,它使用了太多的内存。因为它设法在崩溃之前将大约 200-300MB 的内存变成大约 3GB。
我现在想弄清楚泄漏在哪里,程序的哪一部分导致了泄漏。
因此,我现在想知道在 common-lisp 中使用 sbcl 进行内存分析最常见和最有效的技术是什么?
我已经看过了(room)
,(time)
但是它的输出很冗长,我需要的只是一个包装器,它会说“执行后整体内存使用量为 +1000Byte”,这可以解决问题,因为我只想知道内存在哪里用过的。另一个标准是它必须“即时”工作,因为应用程序很可能会崩溃,因为没有剩余的 RAM。
看起来像这样的东西:
(dotimes (i 4)
(profiler-wrapper :messg "After execution memory ~a~%" (execute-me i) ))
After execution memory +100Mb
After execution memory +100Mb
After execution memory +100Mb
After execution memory +100Mb
NIL