似乎我在编程语言设计中得到了调用堆栈的概念。但是我找不到(可能是我搜索得不够努力)任何关于堆栈帧是什么的合理解释。
所以我想请人用几句话给我解释一下。
发布于 2012-04-08 03:16:17
堆栈帧是推送到堆栈上的数据帧。在调用堆栈的情况下,堆栈帧将表示函数调用及其参数数据。
如果我没记错的话,函数的返回地址首先被压入堆栈,然后是参数和局部变量的空间。它们共同构成了“框架”,尽管这可能是依赖于架构的。处理器知道每个帧中有多少字节,并在帧被推送和弹出堆栈时相应地移动堆栈指针。
编辑:
高级调用堆栈和处理器的调用堆栈之间有很大的不同。
当我们谈论处理器的调用堆栈时,我们谈论的是在汇编或机器代码中处理字节/字级别的地址和值。在谈到高级语言时,有一些“调用堆栈”,但它们是由运行时环境管理的调试/运行时工具,因此您可以记录程序的错误(在较高级别)。在这个级别上,像行号、方法和类名之类的东西通常是已知的。当处理器获得代码时,它完全没有这些东西的概念。
发布于 2012-04-08 03:37:01
一个简短的总结。也许有人有更好的解释。
调用堆栈由一个或多个多个堆栈帧组成。每个堆栈帧对应于对尚未以返回终止的函数或过程的调用。
要使用堆栈帧,线程需要保留两个指针,一个称为堆栈指针(SP),另一个称为帧指针(FP)。SP始终指向堆栈的“顶部”,而FP始终指向帧的“顶部”。此外,线程还维护指向要执行的下一条指令的程序计数器(PC)。
以下内容存储在堆栈中:局部变量和临时变量,当前指令的实际参数(过程、函数等)。
关于堆栈的清理,有不同的调用约定。
发布于 2012-04-08 03:08:14
“调用堆栈是由堆栈框架组成的……”--Wikipedia
堆栈帧是您放在堆栈上的东西。它们是包含有关要调用的子例程的信息的数据结构。
https://stackoverflow.com/questions/10057443
复制相似问题