C语言中restrict的意义,restrict关键字在C ++中的含义是什么?

正如其他人所说,如果C ++ 14中没有任何意义,那么让我们考虑一下__restrict__与C99相同的GCC扩展restrict。

C99

restrict说两个指针不能指向重叠的内存区域。最常见的用法是函数参数。

这限制了函数的调用方式,但允许更多的编译优化。

如果调用者不遵循restrict合同,则定义未定义的行为。

该C99 N1256草案 6.7.3 / 7 “类型的限定”说:

restrict限定符(如寄存器存储类)的预期用途是促进优化,并且从构成符合程序的所有预处理转换单元中删除限定符的所有实例不会改变其含义(即,可观察行为)。

和6.7.3.1“限制的正式定义”给出了血淋淋的细节。

可能的优化

的维基百科例子是非常照明。

它清楚地显示了它如何允许保存一个汇编指令。

没有限制:

void f(int *a, int *b, int *x) {

*a += *x;

*b += *x;

}

伪装配:

load R1 ← *x    ; Load the value of x pointer

load R2 ← *a    ; Load the value of a pointer

add R2 += R1    ; Perform Addition

set R2 → *a     ; Update the value of a pointer

; Similarly for b, note that x is loaded twice,

; because a may be equal to x

你可能感兴趣的:(C语言中restrict的意义)