10 个版本
0.0.10 | 2022 年 10 月 8 日 |
---|---|
0.0.9 | 2022 年 7 月 25 日 |
0.0.7 | 2022 年 6 月 3 日 |
0.0.6 | 2022 年 5 月 28 日 |
在 内存管理 中排名第 165
每月下载 22 次
在 bbolt-rs 中使用
62KB
870 行
aligners
– 强类型内存对齐保证
一些字节只需要对齐。想要将字节批量处理为 8 字节并解释为 u64
?它们必须是 8 字节对齐的。想在字节上运行 SIMD 操作?您需要使用特殊的非对齐指令并冒着性能风险,或者按照目标要求对齐它们。也许您的高性能算法需要页面对齐?
验证某物是否对齐很难。 aligners
通过引入强类型对齐类型来解决此问题。要在目标架构上将对齐的字节对齐到页面边界,您只需做
use aligners::{alignment, AlignedBytes};
let bytes: [u8; 8] = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
let aligned: AlignedBytes<alignment::Page> = bytes.into();
就这样。 AlignedBytes<A>
拥有字节。通过获取引用,您得到 &AlignedSlice<A>
,它与 &[u8]
基本相同,只是其对齐由类型保证。
状态
该包正在积极开发中,API 不稳定。它包含能够将字节对齐到页面或 SIMD 块边界的 MVP 和迭代对齐块的功能。
该包在多个架构上持续构建和测试。我们还使用 Miri 在多个目标三元组上进行测试,以测试难以发现的错误。
不安全
由于该领域的低级指针操作性质,此包需要使用 unsafe
代码。需要使用 unsafe
的两个地方是
- 创建
AlignedBytes
,因为它需要显式与分配器交互以获取正确对齐的字节; - 在
AlignedSlice
和常规字节数组之间进行转换,这依赖于前者的repr(transparent)
可以被转换为后者。 - 在内部使用
AlignedBlock
以维护类型的不可变特性。
欢迎通过 cargo-crev 进行审查。
依赖项
由 cargo-deps
生成的依赖关系图
或作为 cargo tree
的输出
aligners v0.0.1
├── cfg-if v1.0.0
├── lazy_static v1.4.0
└── page_size v0.4.2
└── libc v0.2.125
理由
cfg-if
– 以更易读的方式配置条件编译,特别是确定 SIMD 块大小。它轻量级且不包含不安全代码。lazy_static
– 用于懒加载验证和缓存页面大小。page_size
– 用于获取alignment::Page
的页面大小。
开发者
cargo-hack
– 用于通过编译和运行特征幂集的代码来进行更健壮的测试。anyhow
– 在simd_alignment_test
中使用,以便于错误处理。
crev
建议始终使用 cargo-crev 来验证每个依赖项的可靠性,包括此依赖项。审查受到欢迎。
要将我添加到您的WoT信任列表,请信任我的crev-proof仓库
cargo crev trust id https://github.com/V0ldek/crev-proofs
依赖项
~230KB