我浏览了一些文档和问题/答案,看到有人提到它.我读了一篇简短的描述,说这基本上是程序员的promise ,指针不会被用来指向其他地方.

有人能提供一些实际的 case ,说明它值得实际使用吗?

推荐答案

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

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

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,编译器就可以自由地使用向量指令优化代码.

维基百科上有一个关于restrict的词条,还有另一个例子,here.

C++相关问答推荐

如何从C中的公钥字符串创建EVP_PKEY

理解没有返回语句的递归C函数的行为

DPDK-DumpCap不捕获端口上的传入数据包

为什么即使在强制转换时,此代码也会溢出?

用C++实现余弦函数

如何编写一个for循环来计算C中各项的总和?

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

S和查尔有什么不同[1]?

按长度对argv中的单词进行排序

条件跳转或移动取决于未初始化值(S)/未初始化值由堆分配创建(Realloc)

使用Open62541向OPCUA服务器发送读请求时内存泄漏

从BIOS(8086)中读取刻度需要多少?

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

为什么我的二叉树删除删除整个左部分的树?

正在try 理解C++中的`正在释放的指针未被分配‘错误

赋值两侧的后置增量,字符指针

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?

C 中 struct 体自赋值是否安全?特别是如果一侧是指向 struct 的指针?