2 个不稳定版本
0.2.0 | 2020年9月19日 |
---|---|
0.1.0 | 2020年9月13日 |
#2234 在 Rust 模式
33,495 每月下载量
在 6 crate 中使用
11KB
132 行
type-layout
type-layout 是一个类型布局调试辅助工具,提供可 #[derive]
特质,可以报告
- 类型的名称、大小和最小对齐
- 每个字段的名称、类型、偏移和大小
- 由于对齐要求而产生的填充
type-layout 目前仅适用于具有命名字段的结构体。 这是一个临时限制。
示例
类型的布局仅在它们被 #[repr(C)]
定义时存在。这个crate适用于非 #[repr(C)]
类型,但它们的布局是不可预测的。
use type_layout::TypeLayout;
#[derive(TypeLayout)]
#[repr(C)]
struct Foo {
a: u8,
b: u32,
}
println!("{}", Foo::type_layout());
// prints:
// Foo (size 8, alignment 4)
// | Offset | Name | Size |
// | ------ | --------- | ---- |
// | 0 | a | 1 |
// | 1 | [padding] | 3 |
// | 4 | b | 4 |
对齐类型有尾部填充,这可能在某些 FFI 场景中成为错误来源
use type_layout::TypeLayout;
#[derive(TypeLayout)]
#[repr(C, align(128))]
struct OverAligned {
value: u8,
}
println!("{}", OverAligned::type_layout());
// prints:
// OverAligned (size 128, alignment 128)
// | Offset | Name | Size |
// | ------ | --------- | ---- |
// | 0 | value | 1 |
// | 1 | [padding] | 127 |
最小支持的 Rust 版本 (MSRV)
type-layout 支持 Rust 1.34.1 及以上版本。在 type-layout 达到 1.0 之前,MSRV 的更改需要主要版本号的提升。在 1.0 之后,MSRV 的更改只需进行次要版本号的提升,但需要重大的理由。
许可证
根据您选择以下之一授权:
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则任何有意提交并包含在作品中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双重授权,不附加任何额外条款或条件。
依赖关系
~1.5MB
~37K SLoC