enter
和
push ebp
mov ebp, esp
sub esp, imm
指示?有性能差异吗?如果是这样,哪个更快?为什么编译器总是使用后者?
与
leave
和mov esp, ebp
pop ebp
说明。
最佳答案
在性能上存在差异,尤其是对于enter
。在现代处理器上,这会解码到大约10到20 µopop,而三个指令序列大约是4到6,具体取决于架构。有关详细信息,请查询Agner Fog's指令表。
另外,与三个指令序列的3个时钟相关性链相比,enter
指令通常具有相当高的延迟,例如core2上有8个时钟。
此外,这三个指令序列可以由编译器扩展,以用于调度目的,这当然取决于周围的代码,以允许指令的更多并行执行。
关于assembly - “enter” vs “push ebp; mov ebp, esp; sub esp, imm”和“leave” vs “mov esp, ebp; pop ebp”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5959890/