以下内容仅用作示例,而不是有效的Rust代码.
struct Vec<T: Sized, Count> {
a: [T; Count]
}
Run Code Online (Sandbox Code Playgroud)
在C++模板中可能有类似的东西,但我还没有在Rust中看到它.
我想要一个功能
Drop,所以我不必担心释放内存显而易见的选择是Vec,但它与堆上的盒装切片相比如何?Vec更强大,但我需要数组数学,在我的情况下,不需要像push/pop这样的东西.我们的想法是拥有功能较少但速度更快的东西.
下面我有两个版本的"linspace"函数(la Matlab和numpy),
Vec两者都用得像
let y = linspace_*(start, stop, len);
Run Code Online (Sandbox Code Playgroud)
其中y是长度为线性间隔的"阵列"(即Vec(1)中的(1)和(2)中的盒装切片)len.
对于长度为1000的小"阵列",(1)更快.对于长度为4*10 ^ 6的大型阵列,(1)为SLOWER.这是为什么?我在(2)做错了吗?
当参数len= 1000时,仅通过调用函数进行基准测试就会产生
(1) ... bench: 879 ns/iter (+/- 12)(2) ... bench: 1,295 ns/iter (+/- 38)当参数len= 4000000时,基准测试结果为
(1) ... bench: 5,802,836 ns/iter (+/- 90,209)(2) ... bench: 4,767,234 ns/iter (+/- 121,596)(1)的清单:
pub fn linspace_vec<'a, T: 'a>(start: T, stop: T, len: …Run Code Online (Sandbox Code Playgroud)