这样的扁平化数组对于在基元类型中构建安全吗?
let a = [[0u32;4];4]; let b = std::mem::transmute::<[[u32;4];4], [u32; 16]>(a);
在什么条件下这是安全的?
6qfn3psc1#
数组是Rust中为数不多的保证内存布局的数据结构之一。数组[T; N]保证在内存中被布局为T的N连续示例。因此,[[T; M]; N]保证具有与[T; M * N]相同的内存布局,并且对于任何类型的T来说,从一个到另一个的转换都是安全的。
[T; N]
T
N
[[T; M]; N]
[T; M * N]
1条答案
按热度按时间6qfn3psc1#
数组是Rust中为数不多的保证内存布局的数据结构之一。数组
[T; N]
保证在内存中被布局为T
的N
连续示例。因此,[[T; M]; N]
保证具有与[T; M * N]
相同的内存布局,并且对于任何类型的T
来说,从一个到另一个的转换都是安全的。