#布局 #结构体 #类型 #结构体字段 #字段名

type-layout

可派生特质,用于查看结构体的布局,对调试很有用

2 个不稳定版本

0.2.0 2020年9月19日
0.1.0 2020年9月13日

#2234Rust 模式

Download history 8520/week @ 2024-03-14 7683/week @ 2024-03-21 8082/week @ 2024-03-28 7632/week @ 2024-04-04 9255/week @ 2024-04-11 9758/week @ 2024-04-18 8462/week @ 2024-04-25 7621/week @ 2024-05-02 8656/week @ 2024-05-09 9537/week @ 2024-05-16 7648/week @ 2024-05-23 8452/week @ 2024-05-30 8225/week @ 2024-06-06 9183/week @ 2024-06-13 8929/week @ 2024-06-20 5751/week @ 2024-06-27

33,495 每月下载量
6 crate 中使用

MIT/Apache

11KB
132

type-layout

GitHub CI Status type-layout on crates.io type-layout docs

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 许可证定义,应按上述方式双重授权,不附加任何额外条款或条件。

依赖关系

~1.5MB
~37K SLoC