- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2, 用途
A, 不同程序块的变量之间建立联系
主程序:
子程序:
COMMON Z1,Z2,AL,BE,GA
SUBROUTINE QUAD
READ(11,1)AL,BE,GA
COMMON X1,X2, A,B,C
CALL QUAD …
结果
B, 节省单元,2块程序可以公用一个公用块, 特别是数组
无名公用区
初值
1,名字填符号表 2,分局部区号 3,构造数据区的相应存储映象:局部区,公用块
局部数据区的内容
临时变量,数组,简单变量
形式单元
a
寄存器保护区
返回地址
6
COMMON语句介绍 1, 格式
COMMON/n1/a1,a2,…an,/n2/b1,b2,…bn/ /R,X,Y,Z
公用 区名
变量名, 数组名, 数组说明符
k
a+4
4
分层分配方案
1,将源表示成一个有层次的有向图
2,从有向图的最低层开始, 往上逐层对程序块分配存储单元
11 20-30
1 15-18 4
2
3 7 13-19
9 6-14 5
4 5 8-12
如果不重叠, 需
要55个单元
58 0-4
67 0-5
86 0-7
现在只要工作
A11 A21 A12 A22 A13 A23 B1 B2 B3 B4
2) 间接联系 : DIM A(2,3), B(4) EQU(A(1,2),C),(C,B(1))
3) 不可矛盾 : DIM A(10)
A11 A21 A12 A22 A13 A23 C B1 B2 B3 B4
EQU(X, A(1)), (X,A(3)) DIM A(5), B(10) EQU(A(1), B(2))(A(3),B(3))
引入 CMP 后的符号表:
填B1查, CB新O1段.MBF开T1对L区=对IS始BB链TA(1,入表(.F完入LT口无T成,口=L为BnT的为1u=2最l0l1),后l)en结g果th不变
NAME
…
1
A
CMP
02
2
B
03
3
C
0
COMLIST 表:
NAME B1 …
LENGTH …
FT nu1ll
…
LT nu231ll
1
7.1 静态存储管理 --- FORTRAN 存储分配
FORTRAN 的特点: 1,过程不允许递归; 2,每个数据名所需的存储空间是常数(无可变数组) 3,数据名的性质完全确定
FORTRAN 的可调数组:不是可变数组,例子:
子程序:FUNCTION DIA ( A, N, L )
DIMENSION A ( L, L ) DIA = A ( 1, 1 ) DO 6 I = 2, N 6 DIA = DIA + A ( I, I ) RETURN END
1,规则 : a, 对于简单变量 I,J 属一个等价片, 表示 I,J 占用同一单元 b, 对于(X, A2,3),名表中无A2,3, 只有A,要指出 X 与 A 位置关系, 引入 相对数---A11,相对 X 的地址. c, 对于同一个等价元 A11 在不同的片中出现, 表示这两片的等价元存储是 相关的, 他们应予以合并, 原则是后一等价片按照第一片调整相对数.
7
3, 使用
A, COMMON A(2,3)
B, DIMENSION A(2,3) COMMON A
C, COMMON A DIMENSION A(2,3)
组说明符 数组名
交换次序
8
7.1.2 公用语句处理 用途:不同程序段之间共享数据
COMMON /B1/A,B,C COMMON /B1/E,F,G
12
7.1.3 等价语句处理 1, 等价语句介绍
a, 格式: EQUIVALENCE(变量表1),(变量表2)
b, 用途: 同一等价片中的变量共同存储单元 1) 节省: EQU(A,B,C,D) 变量A,B,C,D共同单元 2) 同一量定义不同名字
13
c,使用:
1) 数组等价 : DIMENSION A(2,3), B(4) EQU(A(1,2),B(1))
主程序: DIMENSION X ( 50, 50 ),
DIMENSION Y( 100, 100 ) … P1 = DIA ( X, 10, 50 ) + DIA ( Y, 100,100)
2
7.1.1 数据区 一个 FORTRAN 程序:
主程序 COMPILER 分块编译
目标程序1 常数 局部区
...
11
处理 COMMON /BLK1 /NAM1, NAM2的算法
1,若块名 BLK1 未出现在 COMMLIST 中,则把它填入并形成 它的空链(FT 和 LT 原来已经为 NULL) 2,把符号表中的 NAM1 和 NAM2 标志为属于公用区,并把他们 依次连接到 BLK1 原链的末端。若原链为空则把 NAM1 的入口 填到 FT 栏中。最后,调整 LT 使它指向新链的末端。
目标程序2 常数 局部区
LODER 分块连接
子程序 子程序
目标程序3 常数 局部区
有名公用区
无名公用区
3
子程序:SUBROTINE SWAP ( A, B )
T=A
A=B
B=T
RETURN
END
名字
符号表:
NAME
性质 ATTR
SWAP 子,二目
A
哑,实变
B
哑,实变
T
实变
地址
DA
ADDR
k
a
k
a+2
第九章 运行时空间组织
常见的分配策略:
1,静态分配策略,适用于编译时能完全确定每个数据项存储 空间的位置情况,如 FORTRAN; 2,动态分配策略,编译时不能完全确定数据项的性质,大小 等,如 ALGOL, 它允许递归过程和可变数组,名字作用域和 生存期满足分程序结构所限定的作用范围,可采用栈式动态 分配策略(内存先申请先释放);当一种语言内存申请和释 放不遵循先请后放时,一般的处理方法是:让运行程序持有 一个大存区(称为堆),凡申请者从堆中分给一块,凡释放 者归还给堆,叫做堆式动态分配策略
B1
A BC
E
FG
9
处理方法 COMMON / B1 / A, B, C ( 50 ) DIMENSION A ( 10, 10 ), B ( 100 ) COMPLEX A, B
当首次扫描到 B1 的时候并不能立即确定每个公用元的相 对地址 怎么办?
10
CMP 和 公用表名 COMLIST
以 COMMON /B1/ A, B, C 为例
A1 A2 A3 A4 A5 A6 … B2 B3 B4 B1 B2 B3 B4
14
2, 等价语句处理
FORTRAN 的等价语句目的在于建立一个程序段中诸变量或数组之间的 存储空间的一致性
例, 处理等价语句: EQUIVALENCE ( X, A( 2, 3 )),(I, J, A( 1, 2 ), K)