いくつかの C プログラムを逆アセンブルして生成されたアセンブリを見ていますが、頻繁に繰り返される単一の最適化に混乱しています。
GCC コンパイラに最適化がない場合、減算に命令を使用しますが、(正確には)subl
最適化をオンにすると、コンパイラは減算の代わりに命令を使用します。以下の例を参照してください。-O3
leal
最適化なし:
83 e8 01 subl $0x1, %eax
最適化あり
8d 6f ff leal -0x1(%edi), %ebp
これらの命令は両方とも 3 バイト長であるため、ここでは最適化が見られません。誰かが私を助けて、コンパイラの選択を説明してくれませんか?
どんな助けでも大歓迎です。