typedef struct {
void * field1;
} s1;
void func1(void) {
s1 my_s1;
s1 * __restrict my_s1_ptr = &my_s1;
*((int*)((char*)my_s1_ptr->field1 + 4)) = 0;
*((int*)((char*)my_s1_ptr->field1 + 8)) = 1;
*((int*)((char*)my_s1_ptr->field1 + 12)) = 2;
*((int*)((char*)my_s1_ptr->field1 + 16)) = 3;
}
对于 Intel 编译器 11.1 版和 gcc 4.6 版,编译器似乎为最后 4 个语句中的每一个重新加载 my_s1_ptr->field1。我对 __restrict 的理解会告诉我最后 3 个负载应该是多余的并且可以被消除。是的,我知道代码很奇怪,但它的结构是这样的。我只是希望能够让编译器消除冗余负载。知道如何说服它这样做吗?