我需要将 struct 与Rust中的16字节边界对齐.似乎可以通过repr
attribute给出对齐的提示,但它不支持这个确切的用例.
我想要实现的功能测试是Foo
型
assert_eq!(mem::align_of::<Foo>(), 16);
或者,具有字段baz
的 struct Bar
println!("{:p}", Bar::new().baz);
总是打印一个可被16整除的数字.
这在Rust中目前可能吗?有什么解决办法吗?
我需要将 struct 与Rust中的16字节边界对齐.似乎可以通过repr
attribute给出对齐的提示,但它不支持这个确切的用例.
我想要实现的功能测试是Foo
型
assert_eq!(mem::align_of::<Foo>(), 16);
或者,具有字段baz
的 struct Bar
println!("{:p}", Bar::new().baz);
总是打印一个可被16整除的数字.
这在Rust中目前可能吗?有什么解决办法吗?
休恩的回答很好,但已经过时了.
从Rust 1.25.0you may now align a type to N
bytes using the attribute #[repr(align(N))]
开始.它被记录在the reference's Type Layout section项下.请注意,对齐必须是2的幂,不能混合align
和packed
表示,对齐类型可能会给类型添加额外的填充.Here's an example of how to use the feature:
#[repr(align(64))]
struct S(u8);
fn main() {
println!("size of S: {}", std::mem::size_of::<S>());
println!("align of S: {}", std::mem::align_of::<S>());
}