Arrays 哪个功能更有效?
哪个功能更有效Arrays 哪个功能更有效?,arrays,performance,caching,matrix,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]
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]);
}
}
int行=20000;
int col=30000;
void func1(){
对于(i=0;i,如果不知道更多,则取决于数组的实现方式
如果数组按行第一顺序存储,则func1更快;如果数组按列第一顺序存储,则func2更快
但是,正如我所说,这里没有足够的信息来给出一个好的答案。第一个函数的性能可能会更好,因为被访问的数据是按顺序排列的(或大部分按顺序排列的)在内存中。这会更快,因为在一个内存位置上执行读取操作会导致相邻的内存位置被带到缓存中,因此当它们被读取时,读取速度会比不在缓存中时快得多。
_
每个人都应该真正了解这类事情的原因是,性能差异可能是绝对巨大的。大约5年前,我正在努力优化一个项目的性能,该项目的代码类似于第二个函数。当使用C编程时,我能够将某些循环的速度提高10倍通过按顺序访问内存。如果您指的是性能,那么只需在调试器中运行它们。@madh3,我想知道一个比另一个快的原因?在func2中,您指的是col而不是columns,对吗?我不知道让3个下拉测试存储在内存中的数组顺序(字节顺序)是一个如此糟糕的问题在所有系统上都不一定相同…@cdeszaq:这与字节排序无关。它与数组上的行主排序或列主排序有关。