6

我有一个 while 循环,我只想在其中执行一次特定操作,并为所有其他循环运行不同的操作。

while (..) {
  if ( 0 == count ) {
       // do_this
  } else {
       // do_that
  }
  count++;
}

在这里,只count需要比较0一次,但在每次循环运行中都不必要地进行比较。有没有另一种方法,比较只发生一次,一旦成功就不会再次调用?

4

3 回答 3

18

要么在循环之前做这件事count == 0,要么如果那不可能(因为它在其他正在做的事情的中间),只需编写你的代码以供人类阅读,任何半体面的编译器都会为你解决这个问题。或者它不会弄明白,CPU 中的分支预测器会完成这项工作。无论哪种方式,像这样的纳米优化很可能会花费您更多的时间来阅读代码,而不是您节省的执行时间。

于 2013-09-23T07:11:18.540 回答
8
{
    // do_this
}
count = 1; /*assuming count previously started at zero*/
while (..) {
    // do_that
    count++; /*although some folk prefer ++count as it's never slower than count++*/
}

更好

于 2013-09-23T07:05:10.360 回答
3

不要进行不必要的优化!

比较的成本是 1-2 个时钟周期,正如 Art 所提到的,它可以被编译器优化掉。与从文件读取的成本相比,成本绝对可以忽略不计。无论如何,程序的性能都会受到 I/O 的限制(内存读取或磁盘读取取决于文件是否映射到内存中)。

在这种情况下,您应该编写代码以便于维护。

于 2013-09-23T07:26:12.757 回答