小循环中的大循环总是比大循环中的小循环快吗?

2022-04-09 00:00:00 performance loops nested-loops c++

我刚刚读了this post,不知道我们是否可以得出结论,无论代码在嵌套循环中做什么,小循环中的大循环必须总是比大循环中的小循环运行得更快?举个例子。

int m, n; 
m = 1000000;
n = 10;

代码段A

for (int i = 0; i < n; i++)         
    for (int j=0; j < m; j++)               
       {       
           DoSomething();        
       }

   

代码段B

for (int j = 0; j < m; j++)               
    for (int i=0; i < n; i++)           
       {       
          DoSomething();          
       }

   

我们可以说,无论DoSomething()实际上做什么,代码段A总是比代码段B运行得更快?


正如@Stackmate所指出的,我想将这个问题扩展为两个

  1. 当嵌套循环内的代码为DoSomething()时,这意味着 DoSomething()与变量i和j无关。 性能差异?

  2. 当嵌套循环内的代码为DoSomething(i,j)时,这意味着 某件事(i,j)与变量i和j有关。性能差异是什么?


解决方案

您的问题没有特定的答案。 决定它是否快的参数是您在循环中所做的事情。 例如,假设您要添加两个数组并将它们存储在第三个数组中:

Code 1:
for(int i = 0; i < 1000; i++)
{
    for(int j = 0; j < 1000000; j++)
         C[i][j] = A[i][j] + B[i][j];
}

Code 2:
for(int i = 0; i < 1000000; i++)
{
    for(int j = 0; j < 1000; j++)
         C[j][i] = A[j][i] + B[j][i];
}

代码1将比代码2快得多。 原因是缓存。 有关更多详细信息,请查看this问题。这些答案信息量非常大,我在这里再次解释缓存的概念没有意义。

相关文章