我的C++应用程序中有通常执行此操作的代码:
bool myFlag = false;
while (/*some finite condition unrelated to myFlag*/) {
if (...) {
// statements, unrelated to myFlag
} else {
// set myFlag to true, perhaps only if it was false before?
}
}
if (myFlag) {
// Do something...
}
我的问题与我的代码的else
语句有关。基本上,我的循环可以基于不满足某些条件,将myFlag的值从false设置为true。永远不要将标志从true设置为false。我想知道哪种语句在性能上更有意义,也许这个问题实际上不是由于编译器优化而引起的。myFlag = true;
或者if (!myFlag) myFlag = true;
我通常会选择前者,因为它需要编写更少的代码。但是,我开始怀疑它是否涉及对内存的不必要写入,因此,如果myFlag已经为真,则后者将阻止不必要的写入。但是,使用后者会不会花费更多时间,因为有条件语句,因此会使用更多指令来编译代码?也许我对此考虑太多了...
更新1
只是澄清一下...后一种情况的目的是,如果变量已经为真,则不写入内存。因此,仅在变量为false时才写入内存。
最佳答案
几乎可以肯定,只使用myFlag = true;
会更好。
您可以从if (!myFlag) myFlag = true;
期望的最好的情况是,编译器会注意到if
是无关紧要的,并对其进行了优化。特别是,if
语句需要读取myFlag
的当前值。如果该值尚未在高速缓存中,则意味着该指令将在等待从内存中读取数据时停顿。
相比之下,如果您只写(不先进行测试),则可以将值写入写队列,然后可以立即执行更多指令。除非/除非读取了myFlag的值,否则您将不会遇到任何停顿(并且假设在写入后不久便对其进行了读取,它可能仍会在高速缓存中,因此停滞将很小)。