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

Is a big loop within a small loop always faster than a small loop within a big one?(小循环中的大循环总是比大循环中的小循环快吗?)
本文介绍了小循环中的大循环总是比大循环中的小循环快吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Boost module machine type #39;X86#39; conflicts with target machine type #39;x64#39;(Boost模块计算机类型#39;x86#39;与目标计算机类型#39;x64#39;)
Trouble running LLVM examples(运行LLVM示例时出现问题)
Linker error while linking some windows APIs(链接某些Windows API时出现链接器错误)
Python ctypes, C++ object destruction(Python ctype,C++对象销毁)
DllGetClassObject return amp;quot;No such interface supportedamp;quot; while CoCreateInstance can find it successful(DllGetClassObject返回amp;不支持这样的接口,而CoCreateInstance发现它成功了)
Is static_castamp;lt;doubleamp;gt;(std::nanf(amp;quot;amp;quot;)) well defined?(Static_castamp;lt;doubleamp;gt;(std::nanf(amp;quot;amp;quot;))是否定义良好?)