通过使用这样的restrict
关键字:
int f(int* restrict a, int* restrict b);
我可以指示编译器数组 a 和 b 不重叠。假设我有一个结构:
struct s{
(...)
int* ip;
};
并编写一个接受两个struct s
对象的函数:
int f2(struct s a, struct s b);
在这种情况下,我如何类似地指示编译器a.ip
并且b.ip
不重叠?
通过使用这样的restrict
关键字:
int f(int* restrict a, int* restrict b);
我可以指示编译器数组 a 和 b 不重叠。假设我有一个结构:
struct s{
(...)
int* ip;
};
并编写一个接受两个struct s
对象的函数:
int f2(struct s a, struct s b);
在这种情况下,我如何类似地指示编译器a.ip
并且b.ip
不重叠?
您也可以restrict
在结构内部使用。
struct s {
/* ... */
int * restrict ip;
};
int f2(struct s a, struct s b)
{
/* ... */
}
因此,编译器可以假定a.ip
并b.ip
用于在f2
函数的每次调用期间引用不相交的对象。
检查这个指针示例,您可能会得到一些帮助。
// xa and xb pointers cannot overlap ie. point to same memmpry location.
void function (restrict int *xa, restrict int *xb)
{
int temp = *xa;
*xa = *xb;
xb = temp;
}
如果两个指针被声明为restrict,那么这两个指针不会重叠。
已编辑