即使g++ -O0(是,-O0!),也会发生这种情况。您的函数编译为:
_Z3divm:.LFB952: pushq %rbp.LCFI0: movq %rsp, %rbp.LCFI1: movq %rdi, -24(%rbp) movq $64, -8(%rbp) movq -24(%rbp), %rax shrq $6, %rax leave ret
请注意shrq $6,右移了6位。
使用-O1,可以删除不必要的垃圾:
_Z3divm:.LFB1023: movq %rdi, %rax shrq $6, %rax ret
在g ++ 4.3.3,x64上的结果。



