我的 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 的值(并且假设它在写入后很快就被读取,它可能仍在缓存中,因此停顿将是最小的),您不会遇到停顿。
关于C++:仅在未设置时设置 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033916/