C++ restrict

关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于该指针的(即restrict修饰的那个指针),即不存在其它进行修改操作的途径;这样的目的是*帮助*编译器进行更好地优化代码,生成效率更高的汇编代码。
例如
int f(int * a,int * b){
    *a=1;
    *b=2;
    return *a;
 }
 除非a=b, 否则 f 的返回值总是为 1。 那么编译器可否将代码优化为这样呢?
 int f(int * a,int * b){
    *a=1;
    *b=2;
    return 1;
 }
 答案是否定的,如果a=b, 显然这个返回值是超出预料的。编译器也不会这样做。因此,为了让编译器更好地优化代码,可以将函数写成这样:
 int f(int restrict * a,int restrict * b){
    *a=1;
    *b=2;
    return *a;
 }
 然后编译器就可以大胆地将代码优化为:
 int f(int restrict * a,int restrict * b){
    *a=1;
    *b=2;
    return 1;
 }
 因为 restrict 限定了 *a 只允许通过a 修改。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值