对于C/C++程序员来说,它是什么意思以及了解它有多重要?
它在整个平台上是否相同,至少在概念上如此?
我把它理解为用于通过函数存储局部变量的已分配内存块...
我想了解更多
Ale*_*ell 53
激活记录是Stack Frame的另一个名称.它是组成调用堆栈的数据结构.它通常由以下部分组成:
因此,调用堆栈由任意数量的激活记录组成,这些激活记录在添加新子例程时添加到堆栈中,并在返回时从堆栈中删除(通常).
元素的实际结构和顺序是平台,甚至是实现定义.
对于C/C++程序员,这种结构的一般知识有助于理解某些实现功能,如调用约定,甚至为什么缓冲区溢出允许运行第三方恶意代码.
更加私密的知识将进一步推动上述概念,并允许程序员调试其应用程序并读取内存转储,即使没有调试器或调试符号也是如此.
更一般地说,一个C/C++程序员可以在他们的业余爱好者编程生涯中占据很大一部分,甚至没有考虑到调用堆栈.
激活记录不是一个在谈论C或C++语言本身时使用的概念.激活记录的格式非常具体.
从概念上讲,参数的传递方式,局部变量的生命周期,函数返回的位置以及调用堆栈如何响应推测投掷都是C++的重要组成部分(后者除外).有关如何实现这些内容的详细信息将影响特定平台的激活记录,但在C++或C中编写代码通常不需要了解这一点.
当我们调用函数时,我们需要某个地方来存储调用者和被调用者的上下文,这个地方称为活动记录(又名堆栈帧)。
是的,激活记录组成调用栈,但是,这并不意味着激活记录必须是基于栈的。它是特定于实现的。
你可能想知道“有什么例子吗?”。
正如@FrakHB 所说,不仅是heap和stack,其他内存区域也可以是活动记录,这就是具体实现的意思。