场景:
假设我有一个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.htmlinput.ptrXXinput.ptrYY将被视为非混叠。
问题是:
编译器是否也将input.ptrXXoutput.ptrYY视为非锯齿?

最佳答案

应该的。对于您在某处声明为restrict的每个指针,编译器可以假定它是对相应数据的唯一访问。通过声明这些,您实际上为编译器提供了保证。
是否所有编译器都能利用这些信息是另一个问题。通过restrict传递struct指针不是很常见,因此您必须查看编译器的功能。

关于c - 结构中限制关键字的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28478312/

10-11 18:01