据我所知,当程序到达函数调用时,通常会执行以下操作:调用堆栈并不是用来告诉你你来自哪里的,而是告诉你接下来要去哪里。
在调用代码中:
- 存储返回地址(在调用堆栈上)
- 保存寄存器状态(在调用堆栈上)
- 写入将传递给函数的参数(在调用堆栈或寄存器中)
- 跳转到目标函数
在被调用目标代码中:
- 检索存储的变量(如果需要)
- 检索存储的变量(如果需要)
返回过程:撤消我们调用函数时所做的操作,即展开/弹出调用堆栈:
- 从调用堆栈中删除本地变量
- 从调用堆栈中删除函数变量
- 恢复寄存器状态(我们之前存储的状态)
- 跳转到返回地址(我们之前存储的地址)
C#的JIT或C#的运行时环境中是否有使调用堆栈工作不同的内容?
感谢任何关于调用堆栈描述的文档指针 - 有关传统调用堆栈如何工作的文档有很多。