关键字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 修改。
C++ restrict
最新推荐文章于 2023-02-04 23:43:01 发布