C99标准中支持Restrict关键字,用来修饰指针。 用restrict关键字修饰的指针所指向的内容,不会被其他任何指针更改,只能由restrict指针更改
例如:
int test_restrict(int* x, int* y) { *x = 0; *y = 1; return *x; }
这是普通的函数,但其实,x y都只更改了各自内容,没交叉更改,所以:
int test_restrict(int* restrict x, int* restrict y) { *x = 0; *y = 1; return *x; }
这个编译器会直接优化return *x变成 return 0.因为途中没有进行其他更改。