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所指出的,我想将这个问题扩展为两个
当嵌套循环内的代码为DoSomething()时,这意味着 DoSomething()与变量i和j无关。 性能差异?
当嵌套循环内的代码为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问题。这些答案信息量非常大,我在这里再次解释缓存的概念没有意义。
这篇关于小循环中的大循环总是比大循环中的小循环快吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:小循环中的大循环总是比大循环中的小循环快吗?
基础教程推荐
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04