06-第6章-运行时存储空间的组织和管理-编译原理-中国科
- 格式:pptx
- 大小:1.15 MB
- 文档页数:150
《编译原理运行时存储空间经济组织ppt》2023-10-26CATALOGUE目录•编译原理概述•运行时存储空间概述•存储空间的经济组织•存储空间的扩展与维护•编译原理与存储空间的结合应用•总结与展望01编译原理概述1 2 3编译原理是研究如何将高级语言程序翻译成低级语言程序的一门科学。
编译原理定义编译原理关注如何将程序翻译成更低级的语言,以优化程序的运行效率和减小存储空间的使用。
编译原理的关注点编译原理包括词法分析、语法分析、语义分析、优化和代码生成等多个环节。
编译原理的基本组成语法分析根据语言的语法规则,将单词或符号组成语法结构。
词法分析将源程序分解成一个个的单词或符号。
语义分析对语法结构进行语义检查,确保其符合语言的语义规则。
代码生成将优化后的程序翻译成目标机器语言。
优化对已通过语义检查的程序进行优化,以提高程序的运行效率。
编译原理的应用编译器设计编译原理是设计编译器的基础,编译器是实现程序从高级语言到低级语言转换的关键工具。
要点一要点二程序优化利用编译原理中的优化技术,可以提高程序的运行效率,减少存储空间的使用。
语言设计编译原理在语言设计中也有重要的应用,它可以帮助设计者更好地理解语言的语法和语义规则。
要点三02运行时存储空间概述运行时存储空间的概念运行时存储空间指在程序运行过程中,用于存储程序中的变量、函数、类等数据和信息的空间。
运行时存储空间的分类根据存储空间的位置,可以分为内存空间和外存空间。
内存空间包括RAM、Cache等,外存空间包括硬盘、固态硬盘等。
在程序编译时,根据程序中使用的变量、函数、类等信息,分配相应的内存空间。
这种方式适用于程序中数据和函数的使用情况在编译时已知的情况。
在程序运行时,根据实际需要动态地分配内存空间。
这种方式适用于程序中数据和函数的使用情况在编译时无法确定的情况。
静态分配动态分配内存管理单元(MMU)用于管理内存空间的分配和释放。
MMU根据程序的请求,分配相应的内存空间,并在程序结束时释放相应的内存空间。
编译原理目标程序运行时的组织简介在编译原理中,目标程序是由程序设计语言的源代码通过编译器转换而成的可执行文件。
目标程序的运行是通过操作系统的支持以及相关的硬件来完成的。
在目标程序运行时,需要对内存的组织进行有效的管理,以保证程序能够正确地执行。
程序的存储结构目标程序在运行时的组织首先涉及到程序的存储结构。
一般来说,目标程序在存储器中被组织为多个段或者区块。
这些段或者区块包括代码段、数据段、堆栈段等。
每个段都有不同的权限,比如代码段通常是只读的,数据段和堆栈段都是读写的。
代码段代码段是存储目标程序的机器指令的区域。
代码段在目标程序运行时是只读的,因为在运行时不能更改源代码。
代码段通常是按照顺序组织的,每条指令都有一个地址。
当程序执行时,计算机会从代码段中读取指令并逐条执行。
数据段数据段是存储目标程序的静态数据、全局变量以及常量的区域。
数据段在目标程序运行时是读写的,因为数据段中的数据可能会发生变化。
数据段通常是按照数据的类型和大小进行组织的,每个数据都有一个地址。
堆栈段堆栈段是存储目标程序的局部变量、函数的参数和返回值等临时数据的区域。
堆栈段在目标程序运行时是读写的,因为堆栈中的数据会被不断压入和弹出。
堆栈段通过栈的数据结构进行组织,数据的压入和弹出都是通过栈指针来实现的。
内存管理目标程序在运行时需要使用内存进行存储和计算。
内存管理是指程序如何分配、使用和释放内存资源的过程。
在目标程序运行时,操作系统负责管理内存的分配和释放,并对内存进行保护,以防止程序的错误操作导致系统崩溃或安全风险。
内存管理的主要任务包括内存分配、内存回收和内存保护。
内存分配是指为程序分配所需的内存空间。
常见的内存分配方式有静态分配和动态分配。
静态分配是在程序加载到内存时预先分配一定的内存空间,而动态分配是根据程序的需要,在运行时临时分配内存空间。
内存回收是指当某个内存空间不再被程序使用时,将其释放回系统。
常见的内存回收方式有手动回收和自动回收。
第六章运行时存储空间组织6.1 完成下列选择题:(1) 过程的DISPLAY表中记录了。
a. 过程的连接数据b. 过程的嵌套层次c. 过程的返回地址d. 过程的入口地址(2) 过程P1调用P2时,连接数据不包含。
a. 嵌套层次显示表b. 老SPc. 返回地址d. 全局DISPLAY地址(3) 堆式动态分配申请和释放存储空间遵守原则。
a. 先请先放b. 先请后放c. 后请先放d. 任意(4) 栈式动态分配与管理在过程返回时应做的工作有。
a. 保护SPb. 恢复SPc. 保护TOPd. 恢复TOP(5) 如果活动记录中没有DISPLAY表,则说明。
a. 程序中不允许有递归定义的过程b. 程序中不允许有嵌套定义的过程c. 程序中既不允许有嵌套定义的过程,也不允许有递归定义的过程d. 程序中允许有递归定义的过程,也允许有嵌套定义的过程【解答】(1) b (2) a(3) d (4) b (5) b6.2 何谓嵌套过程语言运行时的DISPLAY表?它的作用是什么?【解答】当过程定义允许嵌套时,一个过程在运行中应能够引用在静态定义时包围它的任一外层过程所定义的变量或数组。
也就是说,在栈式动态存储分配方式下的运行中,一个过程Q可能引用它的任一外层过程P的最新活动记录中的某些数据。
因此,过程Q运行时必须知道它的所有(静态)外层过程的最新活动记录的地址。
由于允许递归和可变数组,这些外层过程的活动记录的位置也往往是变迁的。
因此,必须设法跟踪每个(静态)外层的最新活动记录的位置,而完成这一功能的就是DISPLAY嵌套层次显示表。
也即,每当进入一个过程后,在建立它的活动记录区的同时也建立一张DISPLAY表,它自顶而下每个单元依次存放着现行层、直接外层等,直至最外层(主程序层)等每一层过程的最新活动记录的起始地址。
6.3 (1) 写出实现一般递归过程的活动记录结构以及过程调用、过程进入与过程返回的指令;(2) 对以return(表达式)形式(这个表达式本身是一个递归调用)返回函数值的特殊函数过程,给出不增加时间开销但能节省存储空间的实现方法。