什么是激活记录?

激活记录是在调用过程/函数时激活/创建的数据结构,它包括有关函数的以下数据。

“C”语言的激活记录包括

  • 实际参数

  • 参数数量

  • 退货地址

  • 返回值

  • 旧堆栈指针 (SP)

  • 函数或过程中的本地数据

这里,Old SP存储了调用该过程的过程的Activation Record的堆栈指针的值,从而导致该Activation Record的产生,即,它是指向调用者的激活记录的指针。

在堆栈分配方案中,当过程 A 调用过程 B 时,B 的激活记录将被推送到 A 的激活记录之上。当过程 B 调用过程 C 时,C 的激活记录将被推送到 B 的激活记录之上,如图 -

堆栈分配方案需要两个指针 -

  • top - 它指向堆栈的顶部。top 指向顶部激活记录的顶部。在图中,顶部指针将指向 C 激活记录的顶部。

  • Stack Pointer (SP) - 它指向当前活动过程的激活记录。

在图中,过程 C 当前是一个活动过程。因此,指针 SP 将指向 C 的激活记录。

过程 C 的激活记录上的指针SP包含旧 SP 的值。这里old SP指的是前一个堆栈指针的值,即前一个激活记录B。因此,C的激活记录中的旧SP包含B的激活记录中SP的值。

全局数据的空间是固定的,静态分配在堆栈的角落。

Saved Machine status - 它在调用过程之前保存有关机器状态的状态。该信息涉及程序计数器和机器寄存器的值,当控制从程序返回时必须恢复这些值。

可选访问链接- 它定义了其他激活记录中保存的非本地数据。

可选控制链接- 它指向调用者的激活记录。

实际参数- 调用过程使用它为被调用过程提供参数。

返回值- 被调用过程使用此字段向调用过程返回值。上述每个字段的大小是在调用过程时确定的。几乎所有字段的大小都可以在编译时确定。

以上是 什么是激活记录? 的全部内容, 来源链接: utcz.com/z/363462.html

回到顶部