据说"离开"指令类似于:
movl %ebp, %esp
popl %ebp
Run Code Online (Sandbox Code Playgroud)
我理解这movl %ebp, %esp部分,并且它用于释放存储的内存(如本问题中所讨论的).
但是popl %ebp代码的目的是什么?
我目前正在阅读 John L. Henessy 的《计算机组织与设计》建筑课程。据我了解, $sp 指向堆栈中最近分配的地址, $fp 指向堆栈的开头。为什么我们需要$fp?如果一个过程调用另一个过程,它们会如何表现?例如,当堆栈增长时,堆栈指针递减,但是 $fp 会发生什么变化?
当一个方法被无限多次递归调用时,就会发生 StackOverflowException。不同的堆栈帧被分配给每个递归调用——在这种情况下使用多个堆栈帧。众所周知,每个方法调用都会分配一个堆栈帧。在C#中使用单个方法(使用单个堆栈帧)时堆栈会溢出吗?