在sbcl中使用的位向量有多少内存?

1.6*_*618 4 vector sbcl common-lisp memory-size

在sbcl中使用的位向量有多少内存?

每位消耗1位内存吗?每位消耗1个字节的内存吗?每位消耗1个字的内存吗?

Xac*_*ach 6

SBCL中的位向量以每位一位有效存储,每个向量加上一些小的内务处理开销.

它们在按位操作方面也非常有效,一次完成一个完整的单词.例如,64位平台上的BIT-XOR将同时处理64位的位向量.


Rai*_*wig 5

从Common Lisp,可以询问位向量是否存在特殊的数组类型:

* (UPGRADED-ARRAY-ELEMENT-TYPE 'bit)
BIT
Run Code Online (Sandbox Code Playgroud)

这意味着当您请求位向量时,CL将为您提供位向量,而不是具有8位元素的向量。

SBCL中对象的大小

Alastair Bridgewater提供此功能是为了尝试在SBCL中获取对象的“大小”:

(defun get-object-size/octets (object)
  (sb-sys:without-gcing
    (nth-value 2 (sb-vm::reconstitute-object
                  (ash (logandc1 sb-vm:lowtag-mask
                                 (sb-kernel:get-lisp-obj-address object))
                       (- sb-vm:n-fixnum-tag-bits))))))

* (get-object-size/octets (make-array 40 :element-type 'bit :initial-element 1))

32
* (get-object-size/octets (make-array 400 :element-type 'bit :initial-element 1))

80
* (get-object-size/octets (make-array 4000 :element-type 'bit :initial-element 1))

528
Run Code Online (Sandbox Code Playgroud)