具有 i

本文关键字:循环 FOR 性能 之间 具有 | 更新日期: 2023-09-27 17:57:02

较小程度上,带有 i<(n+1) 的 for 循环呢?(n+1) 会在循环开始时或每次迭代时被评估一次?

for(int i=0; i<(n+1); i++){  
   // Do something
}
for(int i=0; i<=n; i++){  
   //Do something
}

更新:
正如几乎每个人都建议的那样,我运行了一个简单的测试,其中包含三个循环变体 i

具有 i<n 的 FOR 循环与具有 i<=n 的 FOR 循环之间的性能差异

这可能取决于 n 的值是否在循环过程中发生变化。如果没有,我认为任何现代编译器都会缓存 n+1 的值,而不是每次迭代都计算它。当然,这不是一个保证,如果没有优化,每次都会评估 n+1。

编辑:为了回答标题问题,i <= n 没有明显的区别(除了额外的迭代,假设 n 在两种情况下都相等。CPU 在这两种比较中都有单个操作。

我真的怀疑这会在循环执行中产生可衡量的差异。特别是<<=。如果你真的担心,你应该衡量它。

这是编译器特定的,没有语言标准定义这一点,尽管大多数编译器会尝试缓存该值(如果它被证明是不变的)。

信任编译器。尽管 c# 编译器 + JITer 不如最好的 c++ 编译器,但它仍然相当不错。 除非您使用探查器确定它导致了问题,否则您不应该花费周期来担心这些类型的微优化。 相反,写下逻辑上与你正在做的事情相匹配的东西。

(n+1)将在非常迭代时被评估,假设它没有被编译器优化出来。

至于性能问题 - 使用 StopWatch 类很容易自己衡量。

我猜除非你的i非常高,否则差异可以忽略不计。