编译原理 运行时的存储组织及管理

本文探讨了运行时存储的组织和管理,包括静态存储分配和动态存储分配。静态分配在编译时完成,适用于数据大小固定的变量,而动态分配在运行时进行,适合数据大小不确定的情况。动态分配中,活动记录分为局部数据区、参数区和display区,用于存储变量、参数和外层模块的基地址。动态分配利用堆栈实现,进入和退出过程时分配和撤销数据区。
摘要由CSDN通过智能技术生成

第七章 运行时的存储组织及管理

7.1 概述

运行时的存储组织及管理是目标程序运行时所需要存储空间的组织与管理以及源程序中变量存储空间的分配

静态存储分配

编译阶段编译程序实现对存储空间的管理,和为源程序中的变量分配存储的方法。

条件:如果在编译时能够确定源程序中变量在运行时的数据空间大小,且运行时不改变

但并不是所有数据空间大小都能在编译过程中确定!

动态存储分配

在目标程序运行阶段目标程序实现对存储空间的组织与管理,和为源程序中的变量分配存储的方法。

特点:在目标程序运行时进行分配;编译时要生成进行动态分配的目标指令。

7.2 静态存储分配

(1)分配策略

由于每个变量所需空间的大小在编译时已知,因此可以用简单的方法给变量分配目标地址。

具体步骤:

  • 开辟一数据区。(首地址在加载时确定)
  • 按编译顺序给每个模块分配存储。
  • 在模块内部按顺序给模块的变量分配存储,一般用相对地址,所占数据区的大小由变量类型确定。
  • 目标地址填入变量的符号表中。

这种分配策略要求语言不允许指针或动态分配,不允许递归调用过程(如果递归调用,就相当于又多加了一个函数,又需要分配存储空间了)。典型的例子是Fortran77

(2)模块(fortran子程序)的完整数据区

子程序需要在数据区中保留返回地址,形参也要分配存储以存放相应的实参信息。编译时还要分配临时变量空间(用于存放表达式计算的中间结果等)

FORTRAN子程序的典型数据区:

<
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值