相关疑难解决方法(0)

是否可以使用泛型的类型参数来控制数组的大小?

以下内容仅用作示例,而不是有效的Rust代码.

struct Vec<T: Sized, Count> {
    a: [T; Count]
}
Run Code Online (Sandbox Code Playgroud)

在C++模板中可能有类似的东西,但我还没有在Rust中看到它.

rust

19
推荐指数
2
解决办法
3023
查看次数

Vec和盒装切片的性能比较

我想要一个功能

  • 在堆上分配一个基本的可变长度"数组"(在一般意义上的单词,不一定是Rust类型)浮点数
  • 用值初始化它
  • 实现Drop,所以我不必担心释放内存
  • 实现索引或迭代的东西

显而易见的选择是Vec,但它与堆上的盒装切片相比如何?Vec更强大,但我需要数组数学,在我的情况下,不需要像push/pop这样的东西.我们的想法是拥有功能较少但速度更快的东西.

下面我有两个版本的"linspace"函数(la Matlab和numpy),

  1. "linspace_vec"(见下面的清单)使用 Vec
  2. "linspace_boxed_slice"(参见下面的清单)使用盒装切片

两者都用得像

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)

performance rust

12
推荐指数
1
解决办法
6132
查看次数

标签 统计

rust ×2

performance ×1