#cell #move #interior-mutability #storage #alignment #only

无标准库 unaligned

包含用于封装未对齐值的类型的 crate

2 个版本

0.1.1 2024 年 2 月 17 日
0.1.0 2023 年 7 月 2 日

#191 in 无标准库

MIT/Apache

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