据我了解section 6.7.3.1 of the C standard中“限制”的正式定义,
在下面的函数中,指针y
基于restrict
指针x
;因此,编译器将假定访问*x
和*y
可能是别名:
void assign1(int *pA,long N) {
int *restrict x = pA;
{
int *y = x + N;
*x = *y;
}
}
但是,如果将y
本身声明为restrict
怎么办:编译器可以假设*x
和*y
永远不会混叠吗?
void assign2(int *pA,long N) {
int *restrict x = pA;
{
int *restrict y = x + N;
*x = *y;
}
}