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

标签 rust ffi memory-alignment

<分区>

我想使用 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 的幂,您不能混合使用 alignpacked 表示,对齐类型可能会向该类型添加额外的填充。 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>());
}

关于rust - 可以在稳定的编译器上控制 Rust 结构对齐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625324/

相关文章:

iterator - 为什么 Iterator::next 返回一个选项而不是一个项目?

python - 如何在Rust中将PyArray转换为Vec <Vec <T >>

c - Ruby Fiddle - C 和 Ruby 之间的函数行为不同

c++ - OpenCL 结构对齐错误

gcc - gcc 中用户定义部分的对齐

generics - 如何在 rust 中使用通用数组 crate 初始化通用数组?

enums - 解构枚举时是否可以向上转换为特征?

string - 如何在 Haskell 中编写纯字符串到字符串函数 FFI 到 C++

haskell - cabal FFI 依赖

c - 数组的内存对齐