作为一个练习,我试图微观优化Rust 1.3.0中的代码。我有一个循环遍历数组。是这样的:Rust是否优化了计算范围内的循环?
loop {
for i in 0..arr.len() {
// something happens here
}
}
由于阵列在锈病固定大小,将编译器通过评估arr.len()
只是一次,并重新使用值优化代码,或将表达与所述顶层每个循环过程进行评估?这个问题可以扩展到更多的计算繁重的功能,没有副作用,除了arr.len()
。
换句话说,将上面的代码等同于这样的:
let arr_len = arr.len();
loop {
for i in 0..arr_len {
// something happens here
}
}
请注意,如果您对优化感兴趣,尝试使用迭代器而不是索引到切片中通常是一个好主意,这对于边界检查具有一定的开销。如果可能,请使用'for v in&arr'。 – Shepmaster