小编Sty*_*pox的帖子

C/C++:“mod 2”不会产生与“and 1”相同的指令(gcc -O3)

当使用 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)

c assembly gcc compiler-optimization

-1
推荐指数
1
解决办法
60
查看次数

标签 统计

assembly ×1

c ×1

compiler-optimization ×1

gcc ×1