Saa*_*aad 2 recursion ram callstack operating-system
我只想更好地了解堆栈在地址空间中的含义(即您有代码/文本,堆,数据和堆栈)
基本上我的理解是堆栈包含局部变量,但是数据包含什么和堆栈包含什么之间的区别是什么?是不是数据变量?
如果程序对函数的递归调用a()是否意味着对于每个递归级别都有一个新的堆栈?
堆栈通常与数据的使用和管理方式不同.虽然非局部变量本身通常具有已知的特定存储器位置,但是堆栈上的东西是相对于寄存器(堆栈指针或基指针或某些指针)找到的.
堆栈通常包含局部变量,传递的参数和用于管理堆栈本身的控制信息.
而且,如果你进行递归调用,你不会得到一个新的堆栈,只是一个新的堆栈框架.帧是与当前堆栈深度相关的堆栈块(无论是通过递归还是仅通过常规函数调用).这就是使递归成为可能的原因,即给定深度的变量与其他深度的变量无关.
请记住,这完全取决于架构.我上面的描述是一个常见的情况,但有些架构的堆栈不同,例如SPARC,System z和RCA1802.
更多细节可以在这里找到(框架如何工作)和这里(奇怪的堆栈).