【发布时间】:2020-06-20 08:14:20
【问题描述】:
在 Rust 中使用向量与数组相比,我在性能方面损失了多少?
我所说的性能是指:元素访问速度或迭代速度。
【问题讨论】:
在 Rust 中使用向量与数组相比,我在性能方面损失了多少?
我所说的性能是指:元素访问速度或迭代速度。
【问题讨论】:
它们都将数据存储在线性连续数组中,其中访问或迭代都是 O(1) 操作,因此性能没有差异。向量较慢的唯一情况可能是一些小列表,因为数组存储在当前堆栈帧的堆栈中,因此它们的数据很可能已经加载到 CPU 缓存中。 Vector OTOH 将数据存储在堆上,因此数据在首次访问之前不会在缓存中可用
Vector 还多了一层重定向,因为你需要先加载数组的地址,所以第一次内存访问也可能比较慢,但这可以忽略不计
另一个向量更糟糕的时候是当你使用向量的向量而不是多维数组时,因为每个向量都是单独分配的,并且位于不利于缓存的内存周围。见Access time of vec vs array
【讨论】:
-fstack-protector-all,它会发出额外的代码来检测缓冲区溢出,据我所知,它与操作系统无关。这种保护在 Rust 中没有太大意义,因为它对我们链接的任何 C 库都没有帮助,并且与 Rust 的标准内存安全特性相比没有任何额外的好处。您似乎指的是我不知道的不同“堆栈保护”。