哪个功能更有效?

时间:2012-01-19 18:21:06

标签: arrays performance caching matrix

哪种功能更有效?

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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

不知道更多,这取决于数组的实现方式。

如果数组以行优先顺序存储,则func1更快,如果它是第一列,则func2更快。

但是,就像我说的那样,这里没有足够的信息来提供任何好的答案。

相关问题