Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tại sao cần strict aliasing trong C?

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.