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

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

目录

目标程序运行时的活动

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)第二个阶段为回收阶段,所有未加标记的存储块回收到一起,并插入空闲块链表中,然后消除在存储块中所加的全部标记。

http://www.xdnf.cn/news/14072.html

相关文章:

  • 2025-06-14【视觉】批量筛选图集中包含某种物体对象的方法
  • Spring Framework 执行链路设计
  • PC 基准测试工具 3D Mark 登陆 macOS
  • Boost dlib opencv vs2022 C++ 源码安装集成配置
  • Missing Semester计算机教育中缺失的一课:Vim
  • 端到端记忆网络 vs 神经图灵机:外部记忆的两种哲学之争
  • 腾讯云配置了国内镜像依然docker search失败
  • Vue3 + JavaScript 父组件点击按钮触发子组件事件方法
  • pytorch2.6安装
  • 编程之礼乐
  • Karate UI测试之驱动配置
  • 嵌入式学习笔记C语言阶段--14可变长数组
  • HTTP 缓存策略:强缓存与协商缓存的深入解析
  • Docker 部署 PostgreSQL 指南
  • C++ RPC 远程过程调用详细解析
  • Python爬虫-爬取票牛明星演唱会数据,进行数据分析
  • 日志分割问题
  • 卷积神经网络的参数量及尺度变化计算
  • [每周一更]-(第147期):使用 Go 语言实现 JSON Web Token (JWT)
  • WWDC25中的HDR技术洞察
  • 基于深度学习的智能图像分类系统:从零开始构建
  • BeckHoff <---> Keyence (LJ-8000) 2D相机 Profinet 通讯
  • PyTorch框架详解(1)
  • 韦东奕论文解读
  • 开机自启动文件夹
  • Vue嵌套路由
  • 机器学习入门 | 机器学习方法与模型概述
  • 【图纸管理教程-3】编码统一,效率倍增!解决一物多码问题
  • Manus邀请薅羊毛
  • WPF加载文本文件时如何设置WebBrowser的字体