考虑要写这样一个函数,将一个结构中的所有数据都清0。
假设结构定义如下:
const int N=1000;
struct point{
int vel[3];
int acc[3];
};
point p[N];
//清理函数1
void clear1(point *p,int n)
{
int i,j;
for(i=0;i<n;i++)
{ for(j=0;j<3;j++)
p[i].vel[j]=0;
for(j=0;j<3;j++)
p[i].acc[j]=0;
}
}
//清理函数2
void clear2(point *p,int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
p[i].vel[j]=0;
p[i].acc[j]=0;
}
}
//清理函数3
void clear3(point *p,int n)
{
int i,j;
for(j=0;j<3;j++)
{ for(i=0;i<n;i++)
p[i].vel[j]=0;
for(i=0;i<n;i++)
p[i].acc[j]=0;
}
}
三个函数中 clear1的空间局部性最好,完全顺序存储数据,步长为1,速度最快
clear2次之
clear3当然是慢的可怜,在各个结构中跳来跳取,是要闹哪样。