Hos*_*our 1 multidimensional-array rust row-major-order column-major-order
我正在为我的项目编写 3D 数学库,我想知道 Rust 是列专业还是行专业?例如,我有一个二维数组作为矩阵,我想将它提供给 C 库(如 OpenGL 或 Vulkan),对于这些库,拥有一个紧密排列的列主数组很重要。
好吧,让我们来了解一下:
let arr: [[i8; 2]; 2] = [[1, 2], [8, 9]];
println!(
"{:?} {:?} {:?} {:?}",
&arr[0][0] as *const _,
&arr[0][1] as *const _,
&arr[1][0] as *const _,
&arr[1][1] as *const _,
);
Run Code Online (Sandbox Code Playgroud)
0x7fff5584ae74 0x7fff5584ae75 0x7fff5584ae76 0x7fff5584ae77例如打印。所以:是的,这些具有编译时间已知长度的数组是紧密打包的,并且(考虑到术语的通用定义)行主要。
注意:上面的测试并不是说这总是有效的!您可以在此处阅读有关此主题的更多信息。
但是:通常您使用堆分配的数组,因为您无法事先知道长度。为此目的,使用Vec. 但也有这种类型并没有硬性规定,所以Vec<Vec<T>>是不紧凑!出于这个原因Vec<Vec<T>>是不地道的了-你应该使用简单Vec<T>,做自己指标的计算。
当然,多次编写索引计算也不是一个好的解决方案。相反,您应该定义一些为您进行索引的包装器类型。但是正如 Sebastian Redl 已经提到的那样:您不是唯一遇到此问题的人,并且已经存在完全用于此目的的类型。
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |