c - C99 'restrict' 关键字的实际用法?

标签 c gcc c99 restrict-qualifier

我正在浏览一些文档和问题/答案并看到它被提及。我读了一个简短的描述,说明这基本上是程序员的 promise ,指针不会用于指向其他地方。

谁能提供一些值得实际使用它的实际案例?

最佳答案

restrict 表示指针是唯一访问底层对象的东西。它消除了指针别名的可能性,使编译器能够进行更好的优化。

例如,假设我有一台带有专门指令的机器,可以将内存中的数字 vector 相乘,并且我有以下代码:

void MultiplyArrays(int* dest, int* src1, int* src2, int n)
{
    for(int i = 0; i < n; i++)
    {
        dest[i] = src1[i]*src2[i];
    }
}

如果 destsrc1src2 重叠,编译器需要正确处理,这意味着它必须一次执行一个乘法,从从头到尾。通过 restrict,编译器可以自由地使用 vector 指令优化此代码。

维基百科在restrict 上有一个条目,再举一个例子,here .

关于c - C99 'restrict' 关键字的实际用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/745870/

相关文章:

c - socket编程中的select函数

c - 我如何知道要为数组分配多少空间?

linux - GNU C 库 (glibc) 编译期间出错

macos - 在 Mac 上为 iPhone 交叉编译?

c - 为什么C标准包含许多不安全、无用的函数?

c - 是否可以(合法)在复合文字中分配匿名 union ?

Cygwin Gcc - 访问

c - 解释这个汇编代码

gcc - 为什么链接库的顺序有时会导致 GCC 出错?

使用来自 C99 的库在 Windows 上使用 TCC 编译文件