循环的双倍简单与一个复杂

时间:2017-07-19 15:15:40

标签: c++ performance for-loop optimization

也许这是一个愚蠢的问题,但是说我有两个函数,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:)?

2 个答案:

答案 0 :(得分:1)

这取决于F1F2做什么。

完全无关紧要,或者你可以通过让两个函数一个接一个地调用来体验剧烈的减速。

作为后一种情况的一个例子,考虑F1F2访问两个不同的数组。在每次F1F2运行时,它们会读取足够的数据以覆盖整个缓存。这可能会导致良好的减速。

但总是最好不要推测和衡量代码并对代码进行基准测试。如果两个版本的性能相同,那么最具可读性。

答案 1 :(得分:0)

好吧,正如您所指出的,操作量不同。 但是,如果您使用第二个解决方案,则可以使用多个线程并获得相同或更好的性能。此外,考虑可读性,可测试性,可扩展性,封装性,通常这些因素比您可能获得的任何小的性能增益更重要。而且,编译器通常非常适合使代码更有效地运行,因此我的建议主要集中在您的可读性上,而不是大多数情况下的性能。