Performance 计数差异很大的嵌套for循环的效率
如果Performance 计数差异很大的嵌套for循环的效率,performance,loops,for-loop,Performance,Loops,For Loop,如果a比b大得多,则 for (i = 0; i < a; i++) for (k = 0 k < b; k++) (i=0;i
a
比b
大得多,则
for (i = 0; i < a; i++)
for (k = 0 k < b; k++)
(i=0;i
对于(k=0 k
快于
for (i = 0; i < b; i++)
for (k = 0 k < a; k++)
(i=0;i
对于(k=0 k
我觉得前者会更快,但我似乎无法理解这一点 这真的取决于你在做什么。在不知道正在做什么的情况下,很难进行运行时分析。这就是说,如果您使用此代码遍历一个大数组,则更重要的是遍历每行中的每一列,而不是反之亦然
[0][1][2]
[3] [4][5]
[6] [7][8]
在内存中确实存在[0][1][2][3][4][5][6][7][8]
当内存访问距离较近时,计算机的缓存提供了更大的优势,按顺序遍历内存而不是跳过行提供了更多的局部性。启动循环需要付出努力;循环变量本身加上在循环中声明的所有变量,这些变量都是分配给内存并推送到堆栈上的
这意味着你进入一个循环的次数越少越好,所以在外循环中循环的范围越小。这取决于循环中的内容,不是吗?您需要显示您计划在有问题的循环中运行的内容。这是a*b
和b*a
之间的区别-即没有任何内容。@Blorgbeard如果循环的内容涉及访问foo[i][k]
,例如,一个顺序会导致列主循环(速度较慢),那么它可能不是什么。但是,这实际上取决于循环中执行的操作的具体情况。当然,如果添加更多代码,其中一个会比另一个更快有很多原因,但是根据问题中的信息,没有区别。@Blorgbeard:实际上,第二个版本的分支错误预测可能更少,因此,如果循环体真的不可知,我会选择第二个版本。