看看下面的情况。
;some code
test reg1,reg2
je jump1
;do something
add rsp,20
pop rdx
ret
jump1:
;do something
cmp reg2,reg3
jg jump2
add rsp,20
pop rdx
ret
jump2:
;do something
add rsp,20
pop rdx
ret
类似的汇编在反汇编代码中并不常见。也许编译器可以如此高效地处理。
具有多个return语句会影响性能吗?与上述相比,单收益jmp
可能带来的绩效结果是什么?
这称为“尾巴重复”优化。一些编译器有时会这样做。例如LLVM blog post about it
您也可以为在循环内部具有分支的循环执行此操作。
[通常,当函数结尾很小时(只有1次弹出),这是一件好事,因此花费不多,尤其是在现代的x86上,它具有大的缓存和良好的代码密度(ret
和pop
为单字节) )。