填充指针是否会影响GC?

Bag*_*ers 5 arrays common-lisp fill-pointer

如果我有这个结构:

(defstruct foo
  (x 0 :type 'fixnum))
Run Code Online (Sandbox Code Playgroud)

而这个数组:

(defvar arr (make-array 0 :element-type 'foo :adjustable t :fill-pointer 0))
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

(vector-push-extend (make-foo) arr)
(setf (fill-pointer arr) 0)
Run Code Online (Sandbox Code Playgroud)

foo在阵列中现在GC的候选人?

我从CLHS了解到它不活跃,但我不确定该状态的含义.

Bar*_*mar 10

超出填充指针的元素仍然可以访问,并且不会被垃圾回收.打印数组时不会打印填充指针之外的元素,如果使用它们将被覆盖ARRAY-PUSH(因为它使用填充指针来确定添加新元素的位置),但阵列上的其他操作通常会对它们进行处理.

例如,规范AREF说:

aref忽略填充指针.允许使用aref访问任何数组元素,无论是否有效.