我来自C,我想知道Rust的边界检查会影响性能.每次访问可能需要一些额外的汇编指令,这在处理大量数据时可能会受到影响.
另一方面,处理器性能代价高昂的是内存,因此更多的算术汇编指令可能不会受到影响,但是在加载缓存行之后,顺序访问应该非常快.
有人对此进行了基准测试吗?
我需要从满足某个标准的向量中擦除所有元素.
我的第一种方法是遍历向量并在符合条件的所有元素上调用vector :: erase.
据我所知,vector::erase这个用例的性能不好,因为它从底层数组中删除了项目,并将向量的其余部分向前移动了一个元素(如果擦除了一系列元素,则移动更多).当您移除多个元素时,后部元素将在每次移除时移动.
该remove算法将所有元素移除,并将它们移动到向量的末尾,因此您只需要移除向量的后部,这不涉及移位.
但为什么这比擦除更快?(它更快吗?)
不将元素移动到最后是否意味着将所有后续元素向前移动vector::erase?
怎么来,删除只有O(n)的复杂性?