简单地解释堆栈帧的概念。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我好像有个想法调用堆栈在编程语言设计中。但是我找不到(可能,我只是找不到足够的努力)任何关于什么的合理解释。堆栈框架是。

所以我想请人用几句话向我解释一下。

提问于
用户回答回答于

堆栈帧是将数据帧推送到堆栈上的数据帧。在调用堆栈的情况下,堆栈帧将表示函数调用及其参数数据。

如果我没记错的话,函数返回地址首先被推到堆栈上,然后是参数和局部变量的空间。他们一起制作“框架”,尽管这很可能是依赖于架构的。处理器知道每个帧中有多少字节,并在帧被推送和弹出堆栈时相应地移动堆栈指针。

编辑:

高级调用堆栈与处理器的调用堆栈之间有很大的区别。

当我们讨论处理器的调用堆栈时,我们谈论的是在字节/字级在汇编或机器代码中。在谈到高级语言时,有一些“调用堆栈”,但是它们是一个由运行时环境管理的调试/运行时工具,这样您就可以记录程序的错误(在高级)。在这个级别上,像行号、方法和类名这样的事情经常被知道。当处理器得到代码时,它绝对没有这些东西的概念。

用户回答回答于

很快就结束了。也许有人有更好的解释。

调用堆栈由1或多个堆栈帧组成。每个堆栈帧对应于对尚未以返回结束的函数或过程的调用。

要使用堆栈帧,线程保留两个指针,一个称为堆栈指针(SP),另一个称为框架指针(FP)。sp总是指向堆栈的“顶部”,而FP总是指向框架的“顶部”。此外,该线程还维护指向要执行的下一条指令的程序计数器(PC)。

以下内容存储在堆栈上:局部变量和临时变量、当前指令的实际参数(过程、函数等)

对于堆栈的清理有不同的调用约定。

扫码关注云+社区