c99关键字restrict

今天猛地看到 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不会指向他们的存储区,因而可以并行进行多个数 据的读取与求和。这两种程序编译出的代码执行速度相差极大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值