这些二维阵列中的哪一个有利于使用,为什么?

Ant*_*t's 1 c c++ caching

在facebook组中,我看到了一个类似的问题:

如果一行在下面的二维数组中占主导地位,哪一个是有利的,为什么呢?

a) for(i=0;i<1000;i++)
      for(j=0;j<1000;j++)
           temp=temp+a[i][j];

b) for(j=0;j<1000;j++)
      for(i=0;i<1000;i++)
         temp=temp+a[i][j]
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,我可以看出上述两个陈述没有区别.我猜这些都是一样的.

如果我错了,请纠正我?

Vla*_*lad 6

理论上没有区别.

实际的优点是缓存局部性.如果访问距离较远的位置,则会增加缓存未命中数,从而导致代码运行速度变慢.

根据您的处理器高速缓存大小,您可能需要用一些相当大的数字替换1000以便感知效果.