寄存器存储恢复:MOV指令与PUSH/POP指令哪个执行速度更快?
寄存器存储与恢复的执行速度对比
在x86-64架构的现代CPU上,场景1的寄存器直接暂存方式执行速度更快,具体分析如下:
两种实现的核心差异
场景1:寄存器间暂存实现
mov r9, rdi mov rdi, 10 call someFunction mov rdi, r9
全程仅涉及寄存器到寄存器的读写操作,完全不访问内存。寄存器操作的延迟极低,且不会占用内存带宽,也不会修改栈指针(rsp),避免了栈指针变动带来的潜在指令依赖问题。
场景2:栈操作暂存实现
push rdi mov rdi, 10 call someFunction pop rdi
需要执行两次内存交互:push将rdi的值写入栈内存,pop从栈内存读取值恢复rdi。即便栈内存处于L1缓存(CPU最快的缓存层级),内存访问的延迟依然远高于寄存器间操作;同时push/pop会修改rsp,可能引发后续指令的依赖链阻塞。
特殊情况说明
如果暂存用的寄存器(比如场景1中的r9)原本被占用,需要额外保存该寄存器的值,那场景1的性能优势会被抵消。但只要有空闲的通用寄存器可用,场景1始终是更高效的选择。
部分老旧CPU或特定嵌入式架构中,push/pop可能有硬件优化,但在主流x86-64处理器(如Intel Skylake及以后、AMD Zen系列)中,寄存器直接暂存的性能优势是明确的。
内容的提问来源于stack exchange,提问作者avighnac
相关产品推荐
相关产品推荐

