ξ第七章运行时存储空间管理 第一节变量及存储分配 程序投入运行的必要条件: 一组可运行的代码 个运行环境:分配空间、提供运行信
第七章 运行时存储空间管理 第一节 变量及存储分配 程序投入运行的必要条件: 一组可运行的代码 一个运行环境:分配空间、提供运行信 息
程序的存储空间 1.代码空间:线性存放着目标指令序列 在GAM中,当前执行的指令位置由指 令指针ip指示。 2.数据空间 (1)内容:变量、常数、控制和管理信 、描述符等
一. 程序的存储空间 1. 代码空间: 线性存放着目标指令序列 在GAM中, 当前执行的指令位置由指 令指针ip指示。 2. 数据空间 (1)内容: 变量、常数、控制和管理信 息、描述符等
(2)静态分配:在运行前就可确定数据 空间的大小,在编译时刻就能进行的存储 分配 (3)动态分配运行时才能进行的存储 分配 栈分配:因变量生存期的嵌套性 堆分配:因生存期的随机交叉特性
(2)静态分配: 在运行前就可确定数据 空间的大小, 在编译时刻就能进行的存储 分配 (3)动态分配: 运行时才能进行的存储 分配 栈分配: 因变量生存期的嵌套性 堆分配: 因生存期的随机交叉特性
活动记录 一个程序单元的一次激活所需的信息管 理是通过相应的活动记录来实施的 个单元的每次激活,都应建立相应的活 动记录,它是单元实例的一部分
二. 活动记录 一个程序单元的一次激活所需的信息管 理是通过相应的活动记录来实施的。一 个单元的每次激活,都应建立相应的活 动记录,它是单元实例的一部分
返回地址 1.活动记录的内容 动态链 (1)返回地址 静态链 (2)动态链和静态链 形式单元 (3)形式单元 变量存储区 (4)局部变量或其描述符,以及临时变 量
1. 活动记录的内容 (1)返回地址 (2)动态链和静态链 (3)形式单元 (4)局部变量或其描述符,以及临时变 量 返回地址 动态链 静态链 变量存储区 形式单元
2.活动记录的特点 除了变量存储区外,其余部分存储长 度编译时可以确定,则元素i地址可用下 式计算 D+offset(1) 其中,Oe是在活动记录中的位移D是 活动记录的首地址
2. 活动记录的特点 除了变量存储区外, 其余部分存储长 度编译时可以确定, 则元素i的地址可用下 式计算 D+offset(i) 其中, offset(i)是i在活动记录中的位移; D是 活动记录的首地址
三.变量的存储分配 1.静态变量:不管在程序单元的哪一次 活动中,均绑定于相同的存储位置 条件是:活动记录,变量的存储位置在 编译时可以确定 2.半静态变量:编译时确定相对位置, 单元被激活后,x绑定于D+ offset(x) 条件是:语言允许递归调用
三. 变量的存储分配 1. 静态变量: 不管在程序单元的哪一次 活动中, 均绑定于相同的存储位置 条件是: 活动记录, 变量的存储位置在 编译时可以确定 2. 半静态变量: 编译时确定相对位置, 单元被激活后, x绑定于D+offset(x) 条件是: 语言允许递归调用
3.半动态变量:动态数组;编译时在活 动记录中建立描述符 例:[1.m]inta; [1.n int b 4.动态变量:动态分配。编译时在活动 记录中为动态变量设置二个指针,一个指 向该变量的描述符,另一个指向该变量的 存储空间
3. 半动态变量: 动态数组; 编译时在活 动记录中建立描述符 例: [1..m] int a; [1..n] int b; 4. 动态变量: 动态分配。编译时在活动 记录中为动态变量设置二个指针, 一个指 向该变量的描述符, 另一个指向该变量的 存储空间
四.存储分配模式 1.静态分配 只允许静态变量,变量与存储区域的 绑定关系在编译时便可建立,并完成存储 分配 不允许递归调用,不允许动态数组,不 允许动态类型的数据对象,即不允许有非 静态变量。如: FORTRAN语
四. 存储分配模式 1. 静态分配 只允许静态变量, 变量与存储区域的 绑定关系在编译时便可建立, 并完成存储 分配。 不允许递归调用, 不允许动态数组, 不 允许动态类型的数据对象, 即不允许有非 静态变量。如: FORTRAN语言
2栈式分配 各单元之间的调用关系遵循“后进先出” 模式; 活动记录的建立和撤消也满足“后进先 出”模式; 用栈分配活动记录 分配方法:当激活一个程序单元时,其活 动记录就动态地分配于栈顶
2. 栈式分配 各单元之间的调用关系遵循“后进先出” 模式; 活动记录的建立和撤消也满足“后进先 出”模式; 用栈分配活动记录; 分配方法: 当激活一个程序单元时, 其活 动记录就动态地分配于栈顶