1

我从一些博客中看到了这个问题。给出了以下两个循环,问题是哪一个更快。

for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}

为什么第一个比第二个快?

4

1 回答 1

6

在某些编译器生成的代码中的某些处理器上,第一个可能更快,因为该值与零进行比较。正如@DeadMG 所指出的,它适用于例如 1985 年之前的 x86 处理器。

但它是:

  • 过早的优化,不要因为这个原因把第一行改成第二行!Donald Knuth 曾经说过,我完全同意他的看法

我们应该忘记小的效率,比如大约 97% 的时间:过早优化是万恶之源。

  • 一种不可移植的优化——它只在某些特定情况下在某些特定处理器上运行得更快!并且很有可能它在其他架构上的工作不仅相同,而且速度更慢。

你被警告了。

于 2013-07-28T22:09:25.087 回答