可以在稳定的编译器上控制Rust结构对齐吗?

参见英文答案 >
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>());
}
点赞