首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >简单地解释堆栈帧的概念

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

Stack Overflow用户
提问于 2012-04-08 03:05:06
回答 4查看 130.7K关注 0票数 233

似乎我在编程语言设计中得到了调用堆栈的概念。但是我找不到(可能是我搜索得不够努力)任何关于堆栈帧是什么的合理解释。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-08 03:16:17

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

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

编辑:

高级调用堆栈和处理器的调用堆栈之间有很大的不同。

当我们谈论处理器的调用堆栈时,我们谈论的是在汇编或机器代码中处理字节/字级别的地址和值。在谈到高级语言时,有一些“调用堆栈”,但它们是由运行时环境管理的调试/运行时工具,因此您可以记录程序的错误(在较高级别)。在这个级别上,像行号、方法和类名之类的东西通常是已知的。当处理器获得代码时,它完全没有这些东西的概念。

票数 224
EN

Stack Overflow用户

发布于 2012-04-08 03:37:01

一个简短的总结。也许有人有更好的解释。

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

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

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

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

票数 49
EN

Stack Overflow用户

发布于 2012-04-08 03:08:14

“调用堆栈是由堆栈框架组成的……”--Wikipedia

堆栈帧是您放在堆栈上的东西。它们是包含有关要调用的子例程的信息的数据结构。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10057443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档