1个不稳定版本
0.1.0 | 2022年10月24日 |
---|
#3 在 #bit-pack
14KB
83 行
ptr-bool
tl;dr:具有与指针相同大小的指针和布尔值。
这是一个便利的crate,用于将布尔值和指针打包到相同的八个字节中(32位系统上为四个字节,16位系统上为两个字节)。这是通过将布尔值存储在两个对齐指针的一位中实现的。
通常,指针和布尔值会被填充到16字节一起,而这种方法允许指针和布尔值适应8字节的空间。
该项目受到了rust-gc项目的影响,该项目使用这种方法来处理垃圾回收引用。我看到了这种方法,认为它非常聪明,因此我创建了具有一些便利包装的自己的版本,并创建了自己的crate。
注意事项
-
指针必须对齐到两个,以确保一位是不必要的,可以用来存储布尔值。
-
在读取
PtrBool
的值时可能略有开销,因为布尔值必须从指针每次读取时删除,指针值也必须从布尔值中删除,每次读取时也是如此。也就是说,除非Rust中内置了某种未知的优化,用于将布尔值存储在一比特的情况。 -
存储在
PtrBool
内的值必须是Sized
。这是因为指针被转换成usize
;这会丢失原始指针中可能存在的任何元数据。