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 回の読み込みは冗長であり、削除できることが示唆されます。はい、コードが奇妙であることは承知していますが、このように構成されているのには理由があります。コンパイラに冗長な負荷を排除させたいだけです。それを行うように説得する方法はありますか?