C语言restrict关键字的作用

间而言之,restrict关键字修饰一个指针,并告诉编译器,它不会和其他指针指向同一个地址,从而让编译器优化代码。

例如,有如下函数签名:

int foo(int *a, int *b);

通常,a和b指向不一样的地址,但也是有可能指向一样的地址。那么对于这样的代码:

int foo(int *a, int *b) 
{
    *a = 5;
    *b = 6;

    int m = *a + *b;
    return m;
}

m可能是11,也可能是12。

这时候编译器会确保每次解引用操作都执行,以得到正确的结果。

如果对指针加上restrict修饰,那么就会告知编译器,这两个地址不会一致,从而提升生成指令的性能。

但这个不一致性就交给程序员去保证,如果没有遵守这项契约,结果是为定义的。

也就是

int foo(int * restrict a, int * restrict b);

这样声明后,程序员需要保证函数调用时,a和b指向不一样的地址。

原文地址:https://www.cnblogs.com/demon90s/p/15580190.html