gpt4 book ai didi

recursion - DRAM 中的堆栈是什么(递归期间会发生什么)?

转载 作者:行者123 更新时间:2023-12-01 13:36:40 24 4
gpt4 key购买 nike

我只是想更好地理解地址空间中的堆栈是什么(即你有代码/文本、堆、数据和堆栈)

基本上我的理解是堆栈包含局部变量,但是数据包含的内容和堆栈包含的内容有什么区别?数据变量不也是如此吗?

如果程序对函数 a() 进行递归调用,是否意味着每个递归级别都有一个新堆栈?

最佳答案

堆栈通常与数据的不同之处仅在于其使用和管理方式。虽然非局部变量本身通常具有已知的特定内存位置,但堆栈上的内容是相对于寄存器(堆栈指针或基指针等)找到的。

堆栈通常包含局部变量、传递的参数和用于管理堆栈本身的控制信息。

并且,如果您进行递归调用,您不会得到一个新堆栈,而只是一个新堆栈帧。帧是与当前堆栈深度相关的堆栈 block (无论是这是通过递归或只是常规函数调用)。这就是递归成为可能的原因,即给定深度的变量独立于其他深度的变量。

请记住,这当然完全取决于架构。我上面的描述是一种常见情况,但有些架构的堆栈方式有所不同,例如 SPARC、System z 和 RCA1802。

更多详情可查看here (框架如何工作)和 here (奇怪的堆栈)。

关于recursion - DRAM 中的堆栈是什么(递归期间会发生什么)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com