Rust中动态增长矢量的快速固定数组

时间:2017-07-08 16:48:56

标签: arrays memory vector rust

我需要创建一个已知数量的动态增长的整数向量。矢量的数量是已知的(N = 10 ^ 7)以及任何这些矢量的最大尺寸(M = 2 * 10 ^ 5)。

我的天真想法是:

let list: Vec<Vec<i32>> = vec![Vec::new(); N];

这可行,但在i7 2.8 GHz上需要约3秒。我研究了数组,它通常比向量具有2倍的性能:

// Does not compile!
let list: [Vec<i32>; N] = [Vec::new(); N];

由于Vec不可复制,因此无法编译。我无法使用结构包装Vec并在其上实现Copy

我可以使用一个数组数组([[i32; M]; N])但这会分配太多的内存。

如何创建运行良好的动态大小数组列表?

为了进行比较,C ++中的相同内容在一秒钟内执行:

std::vector<std::vector<int32_t>> list(N, std::vector<int32_t>());

我正在考虑使用链接列表而不是矢量,但我觉得这个问题有一个优雅的解决方案。

更新:正如@Shepmaster正确指出的那样,使用--release进行编译应该是比较的基础。这种方式cargo build --release提供了约45倍的速度提升,速度是-O3的两倍。

0 个答案:

没有答案