C语言restrict关键字的作用

Posted Coding, Thinking, Blogging

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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指向不一样的地址。

以上是关于C语言restrict关键字的作用的主要内容,如果未能解决你的问题,请参考以下文章

再议C语言(10)restrict关键字的作用

C 语言restrict 关键字的概念及使用例子

将使用ARM的“限制”关键字提高我的代码?

精通C语言ANSI C 类型限定符const,volatile,restrict,_Atomic

精通C语言ANSI C 类型限定符const,volatile,restrict,_Atomic

C语言总结_数组与函数传参练习题