场景:
假设我有一个struct
类型,它包含一堆指针,所有指针都声明为restrict
,还有一个函数,它接受其中的几个struct
作为参数,如下所示:
struct bunch_of_ptr
{
double *restrict ptr00;
double *restrict ptr01;
...
double *restrict ptr19;
}
void evaluate(struct bunch_of_ptr input, struct bunch_of_ptr output)
{
// do some calculation on input and return results into output
}
根据http://www.oracle.com/technetwork/server-storage/solaris10/cc-restrict-139391.html,
input.ptrXX
和input.ptrYY
将被视为非混叠。问题是:
编译器是否也将
input.ptrXX
和output.ptrYY
视为非锯齿? 最佳答案
应该的。对于您在某处声明为restrict
的每个指针,编译器可以假定它是对相应数据的唯一访问。通过声明这些,您实际上为编译器提供了保证。
是否所有编译器都能利用这些信息是另一个问题。通过restrict
传递struct
指针不是很常见,因此您必须查看编译器的功能。
关于c - 结构中限制关键字的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28478312/