我对 REPL 中 SBCL 垃圾收集器的以下行为感到有些困惑。定义两个函数:
(defun test-gc ()
(let ((x (make-array 50000000)))
(elt x 0)))
(defun add-one (x) (+ 1 x))
然后运行
(add-one (test-gc))
我希望不再引用原始数组。然而,正如(房间)报告的那样,内存没有被释放。我会理解,如果我直接运行 (test-gc),那么某些引用可能会卡在 SLIME 或
(list * ** ***)
但是这里是这样吗?谢谢,安德烈。
更新前段时间我提交了一个错误。最近得到了证实。见: https ://bugs.launchpad.net/sbcl/+bug/936304