2 个版本
0.1.1 | 2024 年 2 月 17 日 |
---|---|
0.1.0 | 2023 年 7 月 2 日 |
#191 in 无标准库
26KB
360 行
一个包含用于封装未对齐值的类型的 crate。
该 crate 提供的主要类型是 Unaligned<T>
,它存储类型为 T
的未对齐值。存储未对齐值可以作为一种使用 #[repr(packed)]
结构体(只能在不安全的情况下使用)或精心设计的字节数组的替代方案。类型 Unaligned<T>
提供了一个用于处理未对齐值的 API,而伴随类型 UnalignedCell<T>
是一个内部可变类型,它为处理未对齐值提供了一个共享可变的 API。
由于引用必须是对齐的,因此引用一个可能未对齐的值是不安全的。因此,类型 Unaligned<T>
封装了值的未对齐性,允许代码引用(安全的)类型 Unaligned<T>
。它还提供了安全的可变 API 来设置、替换和访问值,而不需要未对齐的引用。
请注意,一般来说,对于未对齐值,安全的 共享 API 是不可能的,因为为了对未对齐值执行任何有用的操作,必须将该值移动到对齐的存储中——这是一个本质上排他性的操作。类型 UnalignedCell<T>
通过允许使用内部可变性的力量通过共享 API 进行排他性访问,在一定程度上缓解了这种限制。
此包默认情况下是 #![no_std]
。可以通过启用 std
功能来访问需要完整标准库的功能。
依赖项
~17KB