【发布时间】:2014-04-13 05:35:57
【问题描述】:
如果我有一个循环来检查数组中的特定值,并且由于某种原因必须遍历所有元素并且不能中途中断。
以下哪项会更有效:在每场比赛中盲目设置标志,或在设置标志之前检查标志是否为假。
bool happened = false;
while (...) {
if (...) {
happened = true;
}
}
对
bool happened = false;
while (...) {
if (...) {
if (!happened) happened = true;
}
}
据我所知,假设内存读取与内存写入一样快(忽略第二个示例中的额外指令),两者或多或少是等效的。我的结论正确吗?
【问题讨论】:
-
根据您的问题的措辞方式,很难准确说出您要问什么,但我认为这将取决于您的访问模式。对数组进行迭代可能会很昂贵,但分支预测错误也是如此。
-
我怀疑它会有所作为,只是支票看起来有点傻。
-
虽然没有分析就不能说“效率”和任何真正的性能差异,但第一个在理论上似乎更好。因为当您决定将
happened设置为 true 时,您不必担心它的当前值,并且额外检查(在第 2 次中)似乎有点矫枉过正。
标签: c performance optimization processing-efficiency