2012-01-19 54 views
-2

哪种功能更有效?哪种功能更有效?

int rows=20000; 
int col=30000; 

void func1() { 
    for(i=0;i<rows;i++) { 
     for(j=0;j<col;j++) 
      print(a[i][j]); 
    } 
} 

void func2() { 
    for(j=0;j<col;j++) { 
     for(i=0;i<rows;i++) 
      print(a[i][j]); 
    } 
} 
+2

高效的方面是什么? – cdeszaq

+0

另外,用什么语言? – cdeszaq

+1

在时间方面 – CommonMan

回答

4

对于第一个函数,性能可能会更好,因为正在访问的数据按顺序(或主要是顺序)排列在内存中。这会更快,因为在一个内存位置上执行读操作会导致相邻内存位置被带入缓存中,所以当它们被读取时,它们的读取速度要比它们不在缓存中时快得多。每个人都应该真正了解这类事情的原因是因为性能差异可能是绝对戏剧性的。大约5年前,我一直致力于优化具有第二个功能代码的项目的性能。通过按顺序访问内存在C中进行编程时,我能够将一些循环的速度提高10倍。

+0

存储在内存中的数组的排序(字节排序)不一定在所有系统上相同... – cdeszaq

+0

@cdeszaq:这与字节排序无关。它与数组上的行主或列主要排序有关。 – parasietje

1

不知道更多,这取决于如何实现数组。

如果数组按行先存储,那么func1更快,如果它是列优先,那么func2更快。

但是,就像我说的,这里没有足够的信息来给出任何好的答案。