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

标签 c++ performance loops nested-loops

我刚刚读了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) 这意味着 DoSomething(i, j) 与变量 i 和 j 有关系。性能差异是什么?

最佳答案

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

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问题了解更多详情。答案非常有用,我没有必要在这里再次解释缓存的概念。

关于c++ - 小循环中的大循环总是比大循环中的小循环快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914350/

相关文章:

c++ - C++ 中的缩小转换

performance - Matlab:从循环中重复调用相同的 mex 函数是否会产生太多开销?

c - 是什么限制了这个简单的 OpenMP 程序的扩展?

c - 如何在For循环中输入两个条件?

c++ - 用于线程间通信的 Windows 套接字

c++ - 为什么我们要运行一个可执行的c++文件前需要 "./"?

c# - 如何测量一把锁的争用率

linux - 如何让 Bash 循环休眠几秒钟?

java - 在Java中,在指定域之间镜像数字

c++ - 如何使用模板生成常规参数列表并将其传递给运行时函数?