运行时存储器的划分 目标代码区 存放程序的目标代码 编译时确定 静态数据区 存放静态数据对象 静态存储分配 栈区 管理过程调用 存放过程活动 运行时确定 所需的相关信息 动态存储分配 相向增长 空闲存储空间 栈式动态 可有效利用空间 堆式动态 实现动态数据分配 堆区 调用mal1oc等函数 时申请的存储空间 2025/4/2
2025/4/2 6 运行时存储器的划分 目标代码区 静态数据区 栈 区 堆 区 存放程序的目标代码 存放静态数据对象 管理过程调用 存放过程活动 所需的相关信息 实现动态数据分配 调用malloc等函数 时申请的存储空间 空闲存储空间 相向增长 可有效利用空间 编译时确定 运行时确定 静态存储分配 动态存储分配 栈式动态 堆式动态
话动记录(Activation Record) 含义:存储管理过程活动所需信息 的一块连续的存储空间 目标代码区 临时单元 静态数据区 内情向量 栈区 局部变量 动 形式单元 运行栈区中的 E二二二二=二二二〓 记 静态链 个栈单元 录 动态链 返回地址 作用:当调用过程时,将在栈顶为过 堆区 程此次活动分配活动记录 2025/4/2 7
2025/4/2 7 活动记录(Activation Record) 临时单元 内情向量 局部变量 形式单元 静态链 动态链 返回地址 运行栈区中的一 个栈单元 目标代码区 静态数据区 栈 区 堆 区 ◼ 含义:存储管理过程活动所 需信息 的一块连续的存储空间 活 动 记 录 ◼ 作用:当调用过程时,将在栈顶为过 程此次活动分配活动记录
活动记录结构与主要内容 TOP指向己用栈顶单元 T0P→ 临时单元 存放临时变量,用于表达式计算 内情向量 > 存放局部数据(数组等) 局部变量 →存放局部数据(局部变量) 3 形式单元 保存实在参数的值或地址 静态链 用于存取非局部名(display表) 连接 2 保存调用者活动记录首地址(SP) 数据 SP> 10 动态链 返回地址 → 目标代码中的返回地址 第一个形参 SP指向现行过程(即最新进 相对地址(相对数)=3 入工作的那个过程)的活动记 栈中绝对地址=SP+3=3[SP] 录在栈里的首地址,用于访问 局部数据 2025/4/2 拿节目录☒
2025/4/2 8 活动记录结构与主要内容 返回地址 动态链 静态链 形式单元 局部变量 内情向量 临时单元 存放临时变量,用于表达式计算 存放局部数据(数组等) 存放局部数据(局部变量) 保存实在参数的值或地址 用于存取非局部名(display表) 保存调用者活动记录首地址(SP) 目标代码中的返回地址 SP TOP TOP 指向已用栈顶单元 SP 指向现行过程(即最新进 入工作的那个过程)的活动记 录在栈里的首地址,用于访问 局部数据 连接 数据 0 1 2 3 第一个形参 相对地址(相对数)=3 栈中绝对地址=SP+3=3[SP] 章节目录
静态分配策略 存储分配策略 ◆编译时对所有数据对象分配固定的存储单元 ◆且在运行时始终保持不变 栈式存储分配 ◆运行时把存储器作为一个栈进行管理 ◆ 每当调用一个过程,它所需的存储空间就动态地分配 于栈顶 ◆一旦退出,它所占空间就予以释放 堆式存储分配 ◆在运行时把存储器组织为堆 ◆允许用户动态申请和归还存储空间 ◆凡申请者从堆中分给一块,凡释放者退回给堆 2025/4/2 章节自绿
2025/4/2 9 存储分配策略 章节目录 ◼ 静态分配策略 ◼ 栈式存储分配 ◼ 堆式存储分配 ◆ 编译时对所有数据对象分配固定的存储单元 ◆ 且在运行时始终保持不变 ◆ 运行时把存储器作为一个栈进行管理 ◆ 每当调用一个过程,它所需的存储空间就动态地分配 于栈顶 ◆ 一旦退出,它所占空间就予以释放 ◆ 在运行时把存储器组织为堆 ◆ 允许用户动态申请和归还存储空间 ◆ 凡申请者从堆中分给一块,凡释放者退回给堆
10.1静态存储分配p232 特点 ◆编译时刻确定存储位置 ◆访问效率高 ■无法解决的问题 ■主要用途 ◆递归调用问题 —栈式存储分配 ◆子程序的目标代码段 ◆动态申请存储空间 ◆静态数据(全局变量) 堆式存储分配 ■ 适用语言 ◆早期标准FORTRAN语言 章节目录 2025/4/2 10
2025/4/2 10 10.1 静态存储分配 p232 ◼ 特点 ◆编译时刻确定存储位置 ◆访问效率高 ◼ 主要用途 ◆子程序的目标代码段 ◆静态数据(全局变量) ◼ 适用语言 ◆早期标准FORTRAN语言 ◼ 无法解决的问题 ◆ 递归调用问题 ——栈式存储分配 ◆ 动态申请存储空间 ——堆式存储分配 章节目录