【发布时间】:2018-11-13 11:44:33
【问题描述】:
我是操作系统的初学者,我正在尝试理解一些代码 sn-ps。你能解释一下这些代码sn-ps之间的区别吗?
int sum_array_rows(int a[M][N])
{
int i,j,sum=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
sum+=a[i][j];
return sum;
}
和
int sum_array_col(int a[M][N])
{
int i,j,sum=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
sum+=a[i][j];
return sum;
}
不同的部分是双 For 属性 他们中的一个应该比另一个更快吗?如果可以,请您解释一下原因,因为我不明白。
【问题讨论】:
-
1.您的代码将导致 N 和 M 不相等的溢出错误,较低的代码将 i 视为列但您已将其用作行索引,其次在大多数现代操作系统上不会有性能差异
-
那么第一个比第二个好?对不起,我不完全理解。 @SiddharthChabra
-
在第二个中,当 i 从 0 到 N-1 变化时,您使用
sum+=a[i][j],但您的数组是 a[M][N],因此您的代码不正确。 -
什么?这与操作系统有什么关系?
-
哦,我想我明白了!非常感谢!! @SiddharthChabra
标签: arrays stride cache-locality