通过 mem::transmute 展平数组安全吗?

Unl*_*kus 3 rust

像这样展平数组对于构建原始类型安全吗?

let a = [[0u32;4];4];
let b = std::mem::transmute::<[[u32;4];4], [u32; 16]>(a);
Run Code Online (Sandbox Code Playgroud)

在什么条件下这是安全的?

Sve*_*ach 9

数组是 Rust 中少数具有保证内存布局的数据结构之一。该数组保证在内存中[T; N]布置为N连续的实例。T因此[[T; M]; N]可以保证与 具有相同的内存布局[T; M * N],并且从一种类型转换为另一种类型对于任何类型都是安全的T

  • @Unlikus不。[数组与元素类型具有相同的对齐方式](https://doc.rust-lang.org/reference/type-layout.html#array-layout)。 (3认同)