https://zhuanlan.zhihu.com/p/656740329
在 x86-64 架构中,rbp 和 rsp 寄存器分别是栈帧基址指针( Base Pointer )和栈指针( Stack Pointer )。
看完了这篇文章,完全搞懂了函数调用过程中,rbp 和 rsp 的使用情况。
但是还是有一点不太理解,就是假如 CPU 只设计 rsp 可以吗?从我简单来看,好像也是可以够用的啊。我总结一下,无外乎是这些:
- 函数使用过程中,减 rsp ,用来放局部变量
- 调用函数瞬间,硬件自动减 rsp ,用来放 return Address
- 下一个函数,继续减 rsp ,用来放局部变量
- 以此类推
返回过程:
- 如果是“减 rsp ,用来放局部变量”,那么直接加 rsp ,就回收了栈空间。
- 如果是“硬件自动减 rsp ,用来放 return Address”,那么 pop 到 pc 即可( x86 里,ret 指令就是这个效果)
那从上面分析来看,只有 rsp ,好像也能完成函数调用的工作啊?