其实就是在执行两层for循环的循环体中,for循环调换位置是否对效率有影响?
如下:
代码段一:
for(row=5;--row>=0;)
for(col=100;--col>=0;)
sum=sum+a[row][col];
代码段二:
for(col=100;--col>=0;)
for(row=5;--row>=0;)
sum=sum+a[row][col];
本人小白,望大神们指教。
看起来都差不多,感觉没区别的样子。
一的局部性好于二。一行中的元素是顺序存储的。但是,估计对效率的影响可以忽略。都在内存中访问很快。
第一种可能更好,但是你的数据那么少,影响不大
第一种是按内存顺序访问的,应该会快点,这个数据量不大,没什么影响。如果数据量大的时候我认为第一种效率更高点
现代的处理器有L1 L2 L3等高速缓存,a[row][col]在内存中的排列是,相同row的第二维数组排列在一起。所以代码段1命中缓存的概率更高,效率要好。
但是这取决于你的数组的大小,以及具体的处理器。
第一种是按内存顺序访问的,应该会快点
显然是代码一
符合计算机存储思维,按行来。
看着差不多,数据少的话应该都一样吧