Strict alising的坑

1

int foo(int *x, long *y) {
  *x = 0;
  *y = 1;
  return *x;
}

会被优化成

foo2:   movl    $0, (%rdi)
        xorl    %eax, %eax
        movq    $1, (%rsi)
        ret

因为编译器会认为,<shttps://intmainreturn0.com/wp-admin/plugins.phptrong>两个不能alising的指针,一定不会指向同一块内存区域,所以会推断出结果一定是0

所以啊,之前网上很多(float *)(&int_var)然后乱搞的做法都容易爆炸……

继续阅读“Strict alising的坑”