第七章 运行时的存储组织及管理
7.1 概述
运行时的存储组织及管理是目标程序运行时所需要存储空间的组织与管理以及源程序中变量存储空间的分配。
静态存储分配
在编译阶段由编译程序实现对存储空间的管理,和为源程序中的变量分配存储的方法。
条件:如果在编译时能够确定源程序中变量在运行时的数据空间大小,且运行时不改变
但并不是所有数据空间大小都能在编译过程中确定!
动态存储分配
在目标程序运行阶段由目标程序实现对存储空间的组织与管理,和为源程序中的变量分配存储的方法。
特点:在目标程序运行时进行分配;编译时要生成进行动态分配的目标指令。
7.2 静态存储分配
(1)分配策略
由于每个变量所需空间的大小在编译时已知,因此可以用简单的方法给变量分配目标地址。
具体步骤:
- 开辟一数据区。(首地址在加载时确定)
- 按编译顺序给每个模块分配存储。
- 在模块内部按顺序给模块的变量分配存储,一般用相对地址,所占数据区的大小由变量类型确定。
- 目标地址填入变量的符号表中。
这种分配策略要求语言不允许指针或动态分配,不允许递归调用过程(如果递归调用,就相当于又多加了一个函数,又需要分配存储空间了)。典型的例子是Fortran77
![](https://cdn.jsdelivr.net/gh/QingYuAnWayne/PicStorage/20201121171049.png)
(2)模块(fortran子程序)的完整数据区
子程序需要在数据区中保留返回地址,形参也要分配存储以存放相应的实参信息。编译时还要分配临时变量空间(用于存放表达式计算的中间结果等)
FORTRAN子程序的典型数据区:
<