c99关键字restrict
2008-04-02 22:36
337 查看
今天猛地看到 restrict这个关键字
功能是将其修饰的变量不与其他变量关联 这样可以提高编译效率
关键字restrict的使用可以通过下面两个程序来说明 。
如下程序:两个均完成2个16位短型数据数组的矢量和
程序1:
void vecsum( short *sum, short *in1, short *in2, unsigned int N)
{
int i;
for(i=0;i<N;i++)
sum[i]=in1[i]+in2[i];
}
程序2:
void vecsum(short * restrict sum, restrict short * in1, restrict short * in2,unsigned int N)
{
int i;
for (i=0;i<N;i++)
sum[i]=in1[i]+in2[i];
}
编译器在编译程序1时,无法判断指针*sum与指针*in1,*in2是否独立。此时,编 译器采取保守的办法,认为他们是相关的,即:认为*sum指向的存储区与*in1,in2指向的存储区可能混迭。这时编译出的代码必须执行完前一次写,然 后才能开始下一次读取。在编译程序2的时候restrict表明指针*in1,*in2是独立的,*sum不会指向他们的存储区,因而可以并行进行多个数 据的读取与求和。这两种程序编译出的代码执行速度相差极大。
功能是将其修饰的变量不与其他变量关联 这样可以提高编译效率
关键字restrict的使用可以通过下面两个程序来说明 。
如下程序:两个均完成2个16位短型数据数组的矢量和
程序1:
void vecsum( short *sum, short *in1, short *in2, unsigned int N)
{
int i;
for(i=0;i<N;i++)
sum[i]=in1[i]+in2[i];
}
程序2:
void vecsum(short * restrict sum, restrict short * in1, restrict short * in2,unsigned int N)
{
int i;
for (i=0;i<N;i++)
sum[i]=in1[i]+in2[i];
}
编译器在编译程序1时,无法判断指针*sum与指针*in1,*in2是否独立。此时,编 译器采取保守的办法,认为他们是相关的,即:认为*sum指向的存储区与*in1,in2指向的存储区可能混迭。这时编译出的代码必须执行完前一次写,然 后才能开始下一次读取。在编译程序2的时候restrict表明指针*in1,*in2是独立的,*sum不会指向他们的存储区,因而可以并行进行多个数 据的读取与求和。这两种程序编译出的代码执行速度相差极大。
相关文章推荐
- 关于c99中restrict关键字的使用
- c99 增加的restrict关键字
- C99中的restrict关键字
- c99 增加的restrict关键字
- c99 restrict 关键字
- c99 增加的restrict关键字
- 【C】C99 restrict 关键字
- 【C99】restrict关键字
- C99中增加的关键字restrict(zz)
- 关键字restrict(C99)
- C99中的restrict关键字
- C99中的restrict和C89的volatile关键字
- C语言restrict关键字的使用
- restrict关键字
- restrict关键字
- restrict: 限定符只适用于对象指针类型,这是C99新增加的
- C 语言restrict 关键字的使用浅谈
- restrict关键字
- register、volatile、restrict 三关键字的用法
- C语言中关键字restrict的用法(linux 为 __restrict)