参考:《深入理解计算机操作系统》中“存储器层次结构”405页
题目:
int A_NUM = 1000000;
int B_NUM = 1000;
int b[A_NUM];
int c[B_NUM];
//例1
for(i = 0; i < A_NUM; i++)
for(j = 0; j < B_NUM; j++)
c[j]++;
//例2
for(i =0; i < B_NUM; i++)
for(j = 0; j < A_NUM; j++)
b[j]++;
题目如上问上述两个例子中那个运行最快。这个好像是BAT的一道面试题。其实这道题所考察的是计算机的存储层次结构。计算机的存储层次结构分为:寄存器,1级缓存,2级缓存,(有的还可能有3级缓存),主存,外存。当寄存器访问数据的时候一般会先访问1级缓存,如果该数据存在则直接访问,如果不存在就会向2级缓存请求。对于访问速度来说,越往下访问速度越慢。对于该问题c数组的大小远小于b数组,所以c数组就有可能全部一次性存储在1级缓存中,当访问时出现不命中的概率就会较小,这样访问速度就会相对较快。所以该问题的结论就是,内部循环越小越快。