当前位置: 首页 > news >正文

【编译原理】第九章 运行时存储

目录

目标程序运行时的活动

1. 过程的活动

2.参数传递

运行时存储器的划分

1.存储器的划分

2.活动记录

3.存储分配策略

简单的栈式存储分配

1.C的活动记录

2.C的函数调用、进入、返回

嵌套过程语言的栈式实现

1.带有静态链的活动记录

2.带有Display的活动记录

堆式动态存储分配

1. 堆式动态存储分配的实现

2.  隐式存储回收


目标程序运行时的活动

编译程序必须分配目标程序运行时的数据空间。

一个可执行程序所使用的存储空间被分为两个区:                          

代码区和数据区

1. 过程的活动

       过程的每一次运行(或执行)被称为一次活动 (activation)。活动是一个动态的概念,除了设 计为永不停机的过程(如操作系统等),或者是因 设计错误而出现死循环的过程之外,任何过程的 活动均有有限的生存期(life time)。

  • 为讨论方便,将整个程序、函数均视为过程。
  •  一个过程的活动是指该过程的一次执行。
  •  过程的活动生存期是指从该过程体第一步操作到最后一步操作之间的操作序。两个过程的活动生存期或嵌套或不重叠。

2.参数传递

值传递、地址传递、值结果传递、名传递

运行时存储器的划分

1.存储器的划分

2.活动记录

3.存储分配策略

简单的栈式存储分配

1.C的活动记录

2.C的函数调用、进入、返回

嵌套过程语言的栈式实现

以Pascal语言为例,由于允许嵌套定义过程,则会 出现“非局部名字的访问”问题。因此简单的栈式存储分配不适用。

活动记录中可配有静态链和嵌套层次表两种方式来实现。

1.带有静态链的活动记录

2.带有Display的活动记录

堆式动态存储分配

    若源程序语言允许用户自由的申请和退还数据空间,则应用堆式存储分配,其管理方式较为复杂,我们仅讨论几个主要问题。

1. 堆式动态存储分配的实现

2.  隐式存储回收

       对各用户存储空间的使用情况进行监控(用则加标 记),对不用、少用(未加标记)的空间及时回收,以提 高空间利用率。

回收过程分为两个阶段:

(1)第一个阶段为标记阶段,对已分配的块跟踪程序中各指针的访问路径。如果某个块被访问过,就给这个块加一个标记。

(2)第二个阶段为回收阶段,所有未加标记的存储块回收到一起,并插入空闲块链表中,然后消除在存储块中所加的全部标记。

相关文章:

  • linux msyql8 允许远程连接
  • 数据库资源帖
  • 第11次课 深搜1 A
  • Javascript什么是回调函数?
  • LangChain面试内容整理-知识点13:输出解析(OutputParser)模块
  • Seata的事务隔离级别是如何保证的?
  • 案例:塔能科技智启某市光域,勾勒城市照明宏图
  • NY248NY254美光科技闪存NY258NY261
  • 使用 C# 源生成器(Source Generators)进行高效开发:增强 Blazor 及其他功能
  • 地理空间视角下的 SIR 传染病模型模拟与可视化
  • xilinx gt的RX EQ
  • C++ QT开发学习指南-从入门到实战项目
  • 浏览器的组成部分与工作原理
  • Spring Boot中Controller层规划与最佳实践详解
  • Docker全平台安装指南:从零到一构建容器化环境(满级版)
  • OVS Faucet Tutorial笔记(下)
  • CQF预备知识:Python相关库 -- 通用非均匀随机数抽样 scipy.stats
  • [架构之美]解决Windows 10主机与Windows 10虚拟机之间无法拖拽复制问题
  • 黑马教程强化day3-1
  • 如何写出优秀的单元测试?
  • 域名备案必须要有服务器吗/河南seo优化
  • 如何提升网站的收录量/网络推广员上班靠谱吗
  • 普升高端品牌网站建设/做外贸推广
  • 网站建设中 什么意思/seo专员是干什么的
  • 网站开发和软件开发工作/百度首页纯净版
  • 网站建设费应怎样做会计分录/seo是什么岗位