最近,当我学习Rust 中的类型布局时,我看到 Rust 中的 struct 支持 #[repr(C)] 指令,所以我想看看默认(Rust)表示和类 C 表示之间的区别。代码如下:
use type_layout::TypeLayout;
#[derive(TypeLayout)]
struct ACG1 {
time1: u16, // 2
time2: u16, // 2
upper: u32, // 4
lower: u16, // 2
}
#[derive(TypeLayout)]
#[repr(C)]
struct ACG2 {
time1: u16, // 2
time2: u16, // 2
upper: u32, // 4
lower: u16, // 2
}
fn main() {
println!("ACG1: {}", ACG1::type_layout());
println!("ACG2: {}", ACG2::type_layout());
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
我了解填充 #[repr(C)] 结构的规则以及整个结构的大小,但令我困惑的是 Rust 表示结构 ACG1。我找不到任何关于 Rust 填充规则的明确文档,并且我认为填充大小也应该包含在结构的整体大小中,但为什么 ACG1 的大小只有 12 个字节? …