2017-03-04 19 views

回答

5

SBCL中的位向量以每位一位有效地存儲,加上每個向量一些小的管理開銷。

它們在bitwise operations上的效率也很高,一次只能說一個字。例如,64位平臺上的BIT-XOR將一次處理64位的位向量。

4

從Common Lisp的一個可以詢問是否存在用於比特向量的特別陣列型:

* (UPGRADED-ARRAY-ELEMENT-TYPE 'bit) 
BIT 

這意味着,當您要求一個位向量,然後CL提供了一個位向量,而不是一個也就是說,具有8位元素的矢量。

在SBCL對象的大小

阿拉斯泰爾·布里奇沃特提供這一功能作爲一種嘗試,以獲得一個物體的「大小」在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