我正在查看通过反汇编一些 C 程序生成的一些程序集,我对经常重复的单个优化感到困惑。
当我对 GCC 编译器没有优化时,使用subl
减法指令,但是当我打开优化(-O3
准确地说)时,编译器使用leal
指令而不是减法,示例如下:
没有优化:
83 e8 01 subl $0x1, %eax
有优化
8d 6f ff leal -0x1(%edi), %ebp
这两条指令都是 3 个字节长,所以我在这里没有看到优化。有人可以帮我解释一下编译器的选择吗?
任何帮助,将不胜感激。