Lisp 如何使用SBCL';s SB-SPR的分配分析?

Lisp 如何使用SBCL';s SB-SPR的分配分析?,lisp,common-lisp,slime,sbcl,Lisp,Common Lisp,Slime,Sbcl,更新:升级到SBCL 1.0.24修复了我的问题。(虽然我还需要将SLIME升级到11-23-2008版本。稳定的2006-04-20版本以及CVS主管似乎与SBCL 1.0.24不兼容。) SBCL统计探查器的表示,除了CPU使用之外,还可以探查内存分配。然而,在我的一生中,除了一个简单的Lisp表单之外,我还无法让它进行更多的评测。下面是一个发生了什么的例子: CL-USER> (require :sb-sprof) ("SB-SPROF") CL-USER> (defun !

更新:升级到SBCL 1.0.24修复了我的问题。(虽然我还需要将SLIME升级到11-23-2008版本。稳定的2006-04-20版本以及CVS主管似乎与SBCL 1.0.24不兼容。)

SBCL统计探查器的表示,除了CPU使用之外,还可以探查内存分配。然而,在我的一生中,除了一个简单的Lisp表单之外,我还无法让它进行更多的评测。下面是一个发生了什么的例子:

CL-USER> (require :sb-sprof)
("SB-SPROF")
CL-USER> (defun ! (n)
           (if (= n 1)
               1
               (* n (! (- n 1)))))
!
CL-USER> (sb-sprof:with-profiling (:mode :alloc :loop nil :show-progress t :max-samples 100 :report :flat)
           (dotimes (n 100)
             (print n)
             (! 10)))
===> 0 of 100 samples taken.

0 
1 
2 
3 
4 
Profiler sample vector full (12 traces / 1000 samples), doubling the size
Profiler sample vector full (17 traces / 2000 samples), doubling the size
Profiler sample vector full (25 traces / 4000 samples), doubling the size
Profiler sample vector full (36 traces / 8000 samples), doubling the size
Profiler sample vector full (52 traces / 16000 samples), doubling the size
Profiler sample vector full (74 traces / 32000 samples), doubling the size
此时,它通常挂起


有人在这方面取得了成功吗?

对我来说很有效(即不挂起),但您的示例消耗很少,运行需要1ms,因此您可能希望获取更多样本并通过:循环T。

挂起听起来不太好,所以您至少应该指定您使用的版本和平台。在sbcl-devel邮件列表中报告这一点也可能是个好主意。这会使Swank线程也挂起吗?我正在OS X 10.5.6.jrockway上运行sbcl x86 1.0.17,是的,我甚至无法中断它。一般来说,我必须终止sbcl过程。然而,升级到1.0.24已经解决了一些问题。谢谢大家的帮助!