我需要将 struct 与Rust中的16字节边界对齐.似乎可以通过repr attribute给出对齐的提示,但它不支持这个确切的用例.

我想要实现的功能测试是Foo

assert_eq!(mem::align_of::<Foo>(), 16);

或者,具有字段baz的 struct Bar

println!("{:p}", Bar::new().baz);

总是打印一个可被16整除的数字.

这在Rust中目前可能吗?有什么解决办法吗?

推荐答案

休恩的回答很好,但已经过时了.

从Rust 1.25.0you may now align a type to N bytes using the attribute #[repr(align(N))]开始.它被记录在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惯用方法

在Rust中宏的表达式中提取对象

有没有办法避免在While循环中多次borrow `*分支`

integer cast as pointer是什么意思

RUST应用程序正在退出,错误代码为:(退出代码:0xc0000005,STATUS_ACCESS_VIOLATION)

在我的Cargo 中,当我在建筑物中使用时,找不到我可以在产品包中使用的 crate .r我如何解决这个问题?

从未排序的链表中删除重复项的铁 rust 代码在ELSE分支的低级上做了什么?

如何设置activx websocket actorless的消息大小限制?

Windows 上 ndarray-linalg 与 mkl-stats 的链接时间错误

当我try 使用 SKI 演算中的S I I实现递归时,为什么 Rust 会失败?

Rust 中的静态引用

仅在使用 &mut 或线程时borrow 的数据在闭包之外转义?

max(ctz(x), ctz(y)) 有更快的算法吗?

切片不能被 `usize` 索引?

如何在 Rust 中编写修改 struct 的函数

你能告诉我如何在 Rust 中使用定时器吗?

为什么 Rust 编译器在移动不可变值时执行复制?

Rust:如果我知道只有一个实例,那么将可变borrow 转换为指针并返回(以安抚borrow 判断器)是否安全?

有没有办法在 Rust 中对 BigInt 进行正确的位移?

如何从 Rust 中不同类型的多个部分加入 Path?