小循环中的大循环总是比大循环中的小循环快吗? [英] Is a big loop within a small loop always faster than a small loop within a big one?

查看:31
本文介绍了小循环中的大循环总是比大循环中的小循环快吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚读了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问题。这些答案信息量非常大,我在这里再次解释缓存的概念没有意义。

这篇关于小循环中的大循环总是比大循环中的小循环快吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆