【问题标题】:How many memory the bit-vector using in sbcl?sbcl 中位向量使用多少内存?
【发布时间】:2017-07-24 11:01:39
【问题描述】:

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

每比特消耗 1 比特内存吗? 每位花费 1 字节内存吗? 每位花费1个字内存吗?

【问题讨论】:

    标签: vector common-lisp sbcl memory-size


    【解决方案1】:

    SBCL 中的位向量以每位一位的方式高效存储,加上每个向量的一些小的管理开销。

    他们在bitwise operations 也非常高效,一次工作一个完整的单词。例如,64 位平台上的 BIT-XOR 将同时处理位向量的 64 位。

    【讨论】:

      【解决方案2】:

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

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

      这意味着当您请求位向量时,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
      

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-01
        • 2022-01-12
        相关资源
        最近更新 更多