Strict aliasing giúp compiler tối ưu hóa bằng cách giả định con trỏ kiểu khác không trỏ cùng địa chỉ.
Ví dụ vi phạm
int temp = 5;
int* var = &temp;
int my_function(double* var) {
temp = 1;
*var = 5.10; // Ghi double vào int qua con trỏ ép kiểu
return temp;
}
main() {
printf("%d", my_function((double*)&temp)); // Kết quả sai: 1717986918
}
Compiler tối ưu giả định double* không alias với int*, nên giữ temp=1 trong register. Ép kiểu vi phạm strict aliasing → hành vi không xác định.
Khắc phục
Dùng restrict keyword hứa không alias, hoặc dùng union, hoặc memcpy.