现在的位置: 首页 > 综合 > 正文

程序的空间局部性

2013年05月22日 ⁄ 综合 ⁄ 共 628字 ⁄ 字号 评论关闭

考虑要写这样一个函数,将一个结构中的所有数据都清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当然是慢的可怜,在各个结构中跳来跳取,是要闹哪样。

抱歉!评论已关闭.