参见英文答案 >
How can I align a struct to a specifed byte boundary? 2个
我想使用aligned属性为C结构编写Rust FFI.
在夜间,可以使用#[feature(repr_simd)],如this question所示.没有#[repr(simd)]的相同技术似乎被限制为8字节的最大对齐.
对齐和SIMD都有各种问题和RFC打开,编译器指向tracking issue #27731似乎停滞不前.
RFC #325分很清楚到没有,但它有些陈旧.
是否可以使用稳定的编译器,在1.22版本的纯(不安全?)Rust中执行此操作?
最佳答案 截至目前,答案是肯定的,您可以在稳定的Rust中指定类型的对齐方式.这是
stabilized in 1.25.0.它记录在
the reference’s Type Layout section下.请注意,对齐必须是2的幂,您可以不混合对齐和打包表示,并且对齐类型可以为该类型添加额外的填充.
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>());
}