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

可以在稳定的编译器上控制Rust结构对齐吗?,rust,ffi,memory-alignment,Rust,Ffi,Memory Alignment,我想使用aligned属性为C结构编写一个Rust FFI 在夜间,可以像中一样使用#[功能(repr_simd)]。没有#[repr(simd)]的相同技术似乎被限制为最多8个字节的对齐 对齐和SIMD都存在各种问题和RFC,编译器指向这些问题和RFC的点似乎已暂停 非常清楚地指出没有,但它有点旧了 在1.22版的纯(不安全?)Rust中,是否可以使用稳定编译器执行此操作?现在,答案是肯定的,您可以在稳定Rust中指定类型的对齐方式。这是我的。它记录在下。请注意,对齐必须是2的幂,不能混合使用

我想使用
aligned
属性为C结构编写一个Rust FFI

在夜间,可以像中一样使用
#[功能(repr_simd)]
。没有
#[repr(simd)]
的相同技术似乎被限制为最多8个字节的对齐

对齐和SIMD都存在各种问题和RFC,编译器指向这些问题和RFC的点似乎已暂停

非常清楚地指出没有,但它有点旧了


在1.22版的纯(不安全?)Rust中,是否可以使用稳定编译器执行此操作?

现在,答案是肯定的,您可以在稳定Rust中指定类型的对齐方式。这是我的。它记录在下。请注意,对齐必须是2的幂,不能混合使用
align
packed
表示,对齐类型可能会给类型添加额外的填充:

#[repr(align(64))]
结构S(u8);
fn main(){
println!(“S:{},std::mem::size_of::());
println!(“S:{},std::mem::align_of::());
}
#[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>());
}