5个版本
0.2.0 | 2023年12月25日 |
---|---|
0.1.4 | 2022年7月17日 |
0.1.2 | 2022年3月1日 |
0.1.1 | 2022年2月27日 |
0.1.0 | 2022年2月26日 |
#197 in 内存管理
24KB
223 行
对齐约束-新类型 newtype
新类型 的 对齐 不仅受底层类型 内在对齐要求 的限制,还受“对齐约束模板”的对齐要求的限制。在这个上下文中,“对齐约束模板” AlignConstrArchetype
是一种类型,其对齐约束施加在底层类型 T
上,以产生 AlignConstr<T, AlignConstrArchetype>
。
说明
- "对齐约束模板"是一个 规定性 功能性 定义。
AlignConstr<T, AlignConstrArchetype>
是某些底层类型T
和“对齐约束模板”AlignConstrArchetype
的,也可以被视为以 精炼类型 具体化 的形式 参数化 新类型。
对齐资源
- "数据对齐",由桑霍·安教授的个人网站提供 - 他在谢里丹学院(奥克维尔的计算机科学系)任教
这篇文章虽然视觉上不是那么吸引人,但写得非常好,不仅解释了什么是对齐,还解释了为什么需要对齐以及何时可能需要过度对齐数据。
德米特里·德米涅夫
- "什么是执行区域和输入段的过度对齐?",Stack Overflow
- "数据结构对齐",GeeksforGeeks
- "类型布局",Rust 参考
- "结构打包的失落艺术",由埃里克·S·雷蒙德(也称为ESR)撰写 - 他是一位美国软件开发者、开源软件倡导者,也是1997年散文和1999年书籍《教堂与市集》的作者
从C编程专家的角度对主题进行了深入探讨。文章不仅涵盖了关于对齐的信息,还涵盖了应用于C的相关主题,以及其他多种编程语言,包括Rust。
德米特里·德米涅夫
示例
use align_constr::{AlignConstr, n_zst::ZST128};
let overaligned_u8 = AlignConstr::<u8, ZST128>::new(3);
assert!(overaligned_u8.value == 3);
// requires non-const context
assert!(&overaligned_u8 as *const _ as usize % 128 == 0);
align_constr
与 aligned
aligned
是一个流行的库,它曾作为 原型 为 align_constr
服务。在撰写本文时,align_constr
在功能和习惯用法方面更为优越,并提供了更广泛的文档和主题资源。为了尊重 aligned
库的贡献者,他们的创建质量的 CI 仍无法与 align_constr
相匹敌。然而,这两个库有限的 范围 使得 align_constr
对于任何用例都可能是更好的选择。
注意:与 aligned
不同,对 as_slice
的依赖是可选的。
关于 align_constr
#[no_std]
友好
许可证
根据您的选择,在以下两种许可证下获得许可:Apache许可证版本2.0 或 MIT许可证。除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在此库中的任何贡献,都应按上述方式双重许可,而无需任何附加条款或条件。