- 论坛徽章:
- 0
|
本人阅读了林锐的高质量C++/C编程指南,看到其中关于for多层循环效率问题,原文是这样阐述的:
"
【建议4-4-1】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。例如示例4-4(b)的效率比示例4-4(a)的高。
for (row=0; row<100; row++)
{
for ( col=0; col<5; col++ )
{
sum = sum + a[row][col];
}
}
示例4-4(a) 低效率:长循环在最外层
for (col=0; col<5; col++ )
{
for (row=0; row<100; row++)
{
sum = sum + a[row][col];
}
}
示例4-4(b) 高效率:长循环在最内层
"
我自己也测试了一下,发现在我的机器上测试结果刚好与林博士所说的相反,下面的是我的测试代码:
1 #include <iostream>
2 #include <time.h>
3 using namespace std;
4
5 #define COL 10000
6 #define ROW 100
7 int main(int argv,char *agrc[])
8 {
9 int col;
10 int row;
11 int i;
12 int a[COL][ROW];
13
14 time_t t1=clock();
15 for(row=0;row<ROW;row++)
16 for(col=0;col<COL;col++)
17 a[col][row]=col+row;
18
19 time_t t2=clock();
20 cout<<"ROW<COL time:"<<double(t2-t1)/CLOCKS_PER_SEC<<endl;
21
22 int b[COL][ROW];
23 t1=clock();
24 for(col=0;col<COL;col++)
25 for(row=0;row<ROW;row++)
26 b[col][row]=col+row;
27
28 t2=clock();
29 cout<<"COL>ROW time:"<<double(t2-t1)/CLOCKS_PER_SEC<<endl;
30 return 1;
31 }
在我的机器上,前一个用时大约:0.2s,后一个0.03s.
有谁能解释真正的原因不? |
|