可以在稳定的编译器上控制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>());
}