什么是堆栈分配?

堆栈分配是一种运行时存储管理技术。激活记录分别在激活开始和结束时被推送和弹出。

每次调用过程中的本地存储都包含在该调用的激活记录中。因此,本地人在每次激活时都绑定到新存储,因为在进行调用时会将新的激活记录推入堆栈。

可以在运行时确定变量的大小,因此局部变量在各种激活期间可以具有不同的存储位置和不同的值。假设注册的顶部标记了堆栈的顶部。在运行时,可以通过分别递增和递减 top 的记录大小来分配和取消分配激活记录。

如果过程 q 具有大小为 a 的激活记录,则在执行 q 的目标代码之前,顶部会递增。当控件从 q 返回时,栈顶减 a。

UNIX 平台上 C 程序的内存组织如下:

在 C 中,数据可以是全局的,这意味着它被分配了静态存储并且可用于任何过程,或者是本地的,这意味着它只能被丢弃它的过程访问。一个程序由一组全局数据声明和声明它的过程组成。

有两个指针,一个是堆栈指针 (SP) 始终指向当前激活过程的激活记录中的特定位置。第二个指针称为top,它总是指向栈顶,即激活记录的顶部。

临时对象用于表达式评估并分配在激活记录之上。激活记录是在调用过程/函数时激活/创建的数据结构,它包含有关函数的以下信息。

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

  • 实际参数

  • 参数数量

  • 退货地址

  • 返回值

  • 旧堆栈指针 (SP)

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

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

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

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

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

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

以上是 什么是堆栈分配? 的全部内容, 来源链接: utcz.com/z/363465.html

回到顶部