5

如果我有这个结构:

(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)

数组中的现在是fooGC 的候选者吗?

我从 CLHS 了解到它不是active,但我不确定该状态的含义。

4

1 回答 1

10

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

例如,规范AREF说:

aref忽略填充指针。允许用于aref访问任何数组元素,无论是否处于活动状态。

于 2016-01-16T22:57:13.260 回答