关于编译器优化
  • 板块学术版
  • 楼主dovely_seele
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/4/11 10:27
  • 上次更新2023/10/23 18:46:20
查看原帖
关于编译器优化
810309
dovely_seele楼主2023/4/11 10:27

最近发现一个奇怪的事情。用 -O2 编译这个代码:

int p; char a[50000005]; int main() {while (a[p]) a[p]--;}

编译结果是这个东西,可以看到循环并没有被优化掉:

main:
        movsx   rax, DWORD PTR p[rip]
        cmp     BYTE PTR a[rax], 0
        je      .L2
        mov     BYTE PTR a[rax], 0
.L2:
        xor     eax, eax
        ret
a:
        .zero   50000005
p:
        .zero   4

在循环后面又加了一句,如下

int p; char a[50000005]; int main() {while (a[p]) a[p]--; a[p]++;}

这个时候循环反而被优化掉了。这是为什么呢?

main:
        movsx   rax, DWORD PTR p[rip]
        mov     BYTE PTR a[rax], 1
        xor     eax, eax
        ret
a:
        .zero   50000005
p:
        .zero   4
2023/4/11 10:27
加载中...