我总是不确定,限制关键字在c++中是什么意思?
这是否意味着指向该函数的两个或多个指针不重叠? 还有别的意思吗?
我总是不确定,限制关键字在c++中是什么意思?
这是否意味着指向该函数的两个或多个指针不重叠? 还有别的意思吗?
当前回答
使用__restrict__,编译器可以进行复杂的优化,因为程序员已经保证__restrict__修饰过的指针指向的数据范围肯定不会相互重叠。
这是通常的情况,所以为了达到高性能的目标,你可以在大多数情况下给你的代码中的指针添加__restrict__装饰器。
其他回答
在他的论文《Memory Optimization》中,Christer Ericson说,虽然restrict还不是c++标准的一部分,但许多编译器都支持它,他建议在可用时使用它:
限制关键字 ! 新的1999年ANSI/ISO C标准 ! c++标准中还没有,但许多c++编译器都支持 ! 只是一个暗示,所以可能什么都不做,仍然是符合 限制限定的指针(或引用)… ! ...基本上是 向编译器承诺 指针的作用域,指针的目标只会 通过该指针(以及复制的指针)访问 从它)。
在支持它的c++编译器中,它的行为可能与在C中相同。
查看这篇SO文章的详细信息:C99 ' restrict '关键字的实际用法?
花半个小时浏览一下埃里克森的论文,很有趣,值得花时间。
Edit
我还发现IBM的AIX C/ c++编译器支持__restrict__关键字。
g++似乎也支持这一点,因为下面的程序在g++上编译得很干净:
#include <stdio.h>
int foo(int * __restrict__ a, int * __restrict__ b) {
return *a + *b;
}
int main(void) {
int a = 1, b = 1, c;
c = foo(&a, &b);
printf("c == %d\n", c);
return 0;
}
我还找到了一篇关于restrict用法的好文章:
揭开限制关键字的神秘面纱
Edit2
我偶然看到一篇文章,专门讨论了在c++程序中使用restrict:
Load-hit-stores和__restrict关键字
另外,Microsoft Visual c++也支持__restrict关键字。
由于一些C库的头文件使用关键字,c++语言将不得不对此做一些事情。在最低限度,忽略关键字,所以我们不需要#定义关键字到一个空白宏来抑制关键字。
这是原来建议添加该关键字。正如dirkgently指出的那样,这是C99的特性;它与c++没有任何关系。
没什么。它被添加到C99标准中。
c++中没有这样的关键字。c++关键字列表可以在c++语言标准的2.11/1节中找到。restrict是C99版本C语言中的关键字,而不是c++中的关键字。