我总是不确定,限制关键字在c++中是什么意思?

这是否意味着指向该函数的两个或多个指针不重叠? 还有别的意思吗?


当前回答

在他的论文《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关键字。

其他回答

在他的论文《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关键字。

这是原来建议添加该关键字。正如dirkgently指出的那样,这是C99的特性;它与c++没有任何关系。

没什么。它被添加到C99标准中。

由于一些C库的头文件使用关键字,c++语言将不得不对此做一些事情。在最低限度,忽略关键字,所以我们不需要#定义关键字到一个空白宏来抑制关键字。

使用__restrict__,编译器可以进行复杂的优化,因为程序员已经保证__restrict__修饰过的指针指向的数据范围肯定不会相互重叠。

这是通常的情况,所以为了达到高性能的目标,你可以在大多数情况下给你的代码中的指针添加__restrict__装饰器。