我的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的值,否则您将不会遇到任何停顿(并且假设在写入后不久便对其进行了读取,它可能仍会在高速缓存中,因此停滞将很小)。

10-05 21:38