问题描述
- 下面两段程序片,其执行效率有区别码?在实际代码中会选用哪一段,为什么?
-
其实就是在执行两层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命中缓存的概率更高,效率要好。
但是这取决于你的数组的大小,以及具体的处理器。
解决方案二:
看起来都差不多,感觉没区别的样子。
解决方案三:
一的局部性好于二。一行中的元素是顺序存储的。但是,估计对效率的影响可以忽略。都在内存中访问很快。
解决方案四:
第一种可能更好,但是你的数据那么少,影响不大
解决方案五:
第一种是按内存顺序访问的,应该会快点,这个数据量不大,没什么影响。如果数据量大的时候我认为第一种效率更高点
解决方案六:
其执行效率有区别码?在实际代码中会选用哪一段,为什么?
解决方案七:
第一种是按内存顺序访问的,应该会快点
解决方案八:
显然是代码一
符合计算机存储思维,按行来。
解决方案九:
看着差不多,数据少的话应该都一样吧
时间: 2024-11-08 19:20:41