Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 计数差异很大的嵌套for循环的效率_Performance_Loops_For Loop - Fatal编程技术网

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:实际上,第二个版本的分支错误预测可能更少,因此,如果循环体真的不可知,我会选择第二个版本。