我很困惑SBCL垃圾收集器在REPL中的以下行为。定义两个函数:
(defun test-gc ()
(let ((x (make-array 50000000)))
(elt x 0)))
(defun add-one (x) (+ 1 x))
然后运行
(add-one (test-gc))
我期望原始数组不再被引用。然而,正如(room)所报告的那样,内存并没有被释放。如果我直接运行(test-gc),那么我可以理解,可能在SLIME或其他地方仍然有一些引用。
(list * ** ***)
这里的情况是什么?谢谢,Andrei。
更新 一段时间以前,我提交了一个错误报告。最近已经得到确认,请参见:https://bugs.launchpad.net/sbcl/+bug/936304