【发布时间】:2013-09-30 02:37:15
【问题描述】:
我试图了解 gcc 在设置 -O3 标志时执行了哪些优化。我很困惑这两行是什么,
xor %esi, %esi
lea 0x0(%esi), %esi
在我看来这是多余的。在这里使用 lea 指令有什么意义?
【问题讨论】:
-
您是在查看未链接的 .o 文件的反汇编输出,还是原始
-S输出?如果是后者,我不知道。如果是前者,那可能是链接器计算偏移量之后的位置。 -
是编译后的c文件的反汇编输出
-
啊,在那种情况下,可能是因为链接器在链接时计算了偏移量,结果发现偏移量为 0。我必须查看源代码和/或中间代码 @987654323 @ 输出确定。
-
@torek
-S的程序集输出尚未传递给链接器。 @REALFREE 这后面是一个循环吗?我的猜测是它只是一个用于对齐目的的多字节无操作。 -
是的,后面跟着循环。所以 %esi 保持不变?