【发布时间】:2017-12-24 23:15:57
【问题描述】:
也许这是一个愚蠢的问题,但假设我有两个函数,void F1(int x) 和 void F2(int x),我想在 for 循环的每次迭代中执行它们。如果我做一个大的 for 循环,它会有多大差异(性能方面),如下所示:
`
for(int i = 0; i < 100 ; i++)
{
F1(i);
F2(i);
}
`
相比做两个单独的循环,一个我叫F1,一个我叫F2:
`
for(int i = 0 ; i < 100 ; i++)
F1(i);
for(int i = 0 ; i < 100 ; i++)
F2(i);
`
在写这篇文章时,我突然想到第一种方法可能更快,因为只有大约 100 个增量和 100 个比较,而在第二种情况下,我们将得到 200 个。
假设我的循环只需运行 200 次迭代。考虑到 2007 年及之后的 CPU,两个 for 循环方法在性能方面是否几乎相同:)?
【问题讨论】:
-
最简单的事情:编写一个测试来测量两种情况所花费的时间
-
如果有任何性能差异,很可能是由缓存局部性决定的。答案可能完全取决于实际用例。唯一的解决方案是在您的实际应用和测量中都进行尝试。
-
请记住,这两个示例的行为不同。第一个将交织对
F1和F2的调用,而第二个将执行对F1的所有调用,然后是对F2的所有调用。使用正确且更易于阅读和理解的内容。只有当您稍后测量该代码中的瓶颈时,您才应该担心性能。 -
@FrançoisAndrieux 此外,由于这很可能是缓存问题,因此此代码的性能特征可能因 CPU 类型而异。 i5 可能会以与生产中使用的 Xeon 完全不同的方式来处理这个问题。这里没有简单的正确答案,因为正如您所建议的,答案以“取决于...”开始
标签: c++ performance for-loop optimization