因此,有两种方法可以通过首先迭代第一维或第二维来计算二维数组 . 但是,哪一个更快获得x86_64机器架构的二维数组的总和?
这是sum数组行的C代码
int sum_array_rows(double a[16][16]){
int i, j;
double sum = 0;
for (i = 0; i < 16; i++)
for (j = 0; j < 16; j++)
sum += a[i][j];
return sum;
}
这是sum数组cols
int sum_array_cols(double a[16][16]){
int i, j;
double sum = 0;
for (j = 0; j < 16; j++)
for (i = 0; i < 16; i++)
sum += a[i][j];
return sum;
}
1 回答
两种功能的复杂性是相同的 .
但是,CPU在其缓存中加载内存页面时可以更快地访问相邻单元格(Spectre和Meltdown攻击基于此优化) .
该数组是16行16列,在内存中是类似的
所以,理论上第一个应该更快 . 但是考虑到阵列本身非常小(在内存中),差异(如果有的话)应该是最小的 .