当使用 gcc 和最大优化(GCC 11.1.0,gcc -std=c11 -O3)编译这两个片段时,我希望获得完全相同的可执行文件,因为%2和&1操作是等效的。objdump但是,在用 反汇编之后,两个目标文件有所不同。输出如下所示。
int main(int argc, char **argv){
return argc & 1;
}
Run Code Online (Sandbox Code Playgroud)
0000000000001020 <main>:
1020: 89 f8 mov %edi,%eax
1022: 83 e0 01 and $0x1,%eax
1025: c3 ret
1026: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
Run Code Online (Sandbox Code Playgroud)
0000000000001020 <main>:
1020: 89 f8 mov %edi,%eax
1022: 83 e0 01 and $0x1,%eax
1025: c3 ret
1026: 66 2e 0f 1f 84 …Run Code Online (Sandbox Code Playgroud)