第十章 运行时空间组织 常见的分配策略: 1,静态分配策略, 适用于编译时能完全确定每个数据项存储 空间的位置情况,如FORTRAN; 2,动态分配策略,编译时不能完全确定数据项的性质,大小 等,如ALGOL,它允许递归过程和可变数组,名字作用域和 生存期满足分程序结构所限定的作用范围,可采用栈式动态 分配策略(内存先申请先释放):当一种语言内存申请和释 放不遵循先请后放时,一般的处理方法是:让运行程序持有 一个大存区(称为维),凡申请者从堆中分给一块,凡释放 者归还给堆,叫做堆式动态分配策略 第0章运行空间存
第10章 运行空间存储 6 第十章 运行时空间组织 常见的分配策略: 1,静态分配策略,适用于编译时能完全确定每个数据项存储 空间的位置情况,如 FORTRAN; 2,动态分配策略,编译时不能完全确定数据项的性质,大小 等,如 ALGOL, 它允许递归过程和可变数组,名字作用域和 生存期满足分程序结构所限定的作用范围,可采用栈式动态 分配策略(内存先申请先释放);当一种语言内存申请和释 放不遵循先请后放时,一般的处理方法是:让运行程序持有 一个大存区(称为堆),凡申请者从堆中分给一块,凡释放 者归还给堆,叫做堆式动态分配策略
10.1静态存储管理-FORTRAN存储分配 FORTRAN的特点: 1,过程不允许递归: 2,每个数据名所需的存储空间是常数(无可变数组) 3,数据名的性质完全确定 FORTRAN的可调数组:不是可变数组,例子: 子程毫:FUNCTION DIA(A,N,L) 主程序:DIMENSION X(50,50), DIMENSION A(L,L) DIMENSION Y(100,100) DA=A(1,1) D06I=2,N P1=DA(X,10,50)+D1A(Y,100,100) 6 DIA DIA +A(I,I) RETURN END 第10章运行空间存储
第10章 运行空间存储 7 10.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 主程序: DIMENSION X ( 50, 50 ), DIMENSION Y( 100, 100 ) … P1 = DIA ( X, 10, 50 ) + DIA ( Y, 100,100)
10.1.1数据区 目标程序1 一个FORTRAN程序: 常数 局部区 主程序 目标程序2 COMPILER分块编译 常数 LODER分块连接 局部区 子程序 目标程序3 常数 局部区 子程序 有名公用区 无名公用区 第0章运行空间存储
第10章 运行空间存储 8 10.1.1 数据区 一个 FORTRAN 程序: 主程序 子程序 子程序 COMPILER 分块编译 目标程序1 常数 局部区 目标程序2 常数 局部区 目标程序3 常数 局部区 有名公用区 无名公用区 LODER 分块连接
子程序:SUBROTINE SWAP(A,B) T=A A=B B=T RETURN END 名字 性质 地址 符号表: NAME ATTR DA ADDR SWAP 子,二目 A 哑,实变 k a B 哑,实变 k a+2 T 实变 k a+4 第10章运行空间存储
第10章 运行空间存储 9 符号表: 名字 NAME 性质 ATTR 地址 DA ADDR SWAP 子,二目 A 哑,实变 k a B 哑,实变 k a+2 T 实变 k a+4 子程序:SUBROTINE SWAP ( A, B ) T = A A = B B = T RETURN END
分层分配方案 1,将源表示成一个有层次的有向图 2,从有向图的最低层开始,往上逐层对程序块分配存储单元 11 20-30 15-18 4 13-19 3 7 2 9 5 8-12 6-14 5 如果不重叠,需 要55个单元 5 8 8 6 现在只要31个 0-4 0-5 0-7 第0章运行空间存信
第10章 运行空间存储 10 分层分配方案 1,将源表示成一个有层次的有向图 2,从有向图的最低层开始, 往上逐层对程序块分配存储单元 20-30 1 8 3 2 4 6 7 5 11 4 9 5 7 8 5 7 13-19 8-12 0-7 0-5 0-4 6-14 15-18 如果不重叠, 需 要55个单元 现在只要31个