在我的代码中,我有一个与1个字节对齐的类型,而一个函数则需要与8个字节对齐的类型。以下假设代码显示了此用法:
fn use_bar(bar: &mut [u64; 25]) {
unimplemented!()
}
fn main() {
let mut foo: [u8; 200] = get_foo();
unsafe {
// Option 1
use_bar(mem::transmute::<&mut [u8; 200], &mut [u64; 25]>::(&mut foo));
// Option 2
use_bar(&mut *(&mut foo as *mut [u8; 200] as *mut [u64; 25]));
}
}
不幸的是,这不一定有效。如果您向clippy询问第一个选项,它将告诉您变换引用是一件坏事。选项2可能有效,但是,它会告诉您[u64; 25]
的对齐要求(8字节对齐)比[u8; 200]
(1字节对齐)更严格,因此这可能会导致不确定的行为。
由于我不控制get_foo()
返回的类型,有什么办法可以迫使foo
对齐8个字节? (除了将其包装在正确对齐的结构中)