如果我有这个结构:
(defstruct foo
(x 0 :type 'fixnum))
和这个数组:
(defvar arr (make-array 0 :element-type 'foo :adjustable t :fill-pointer 0))
然后执行以下操作:
(vector-push-extend (make-foo) arr)
(setf (fill-pointer arr) 0)
数组中的foo
现在是GC的候选者吗?
我从CLHS了解到它不是active,但不确定该州的含义。
答案 0 :(得分:9)
超出填充指针的元素仍然可以访问,并且不会被垃圾回收。打印数组时不会打印填充指针之外的元素,如果使用ARRAY-PUSH
它们将被覆盖(因为它使用填充指针来确定添加新元素的位置),但阵列上的其他操作通常会对它们进行处理。
例如,AREF
的规范说:
aref
忽略填充指针。允许使用aref
访问任何数组元素,无论是否有效。