1 / 27
文档名称:

第九章 存储空间结构.ppt

格式:ppt   大小:1,169KB   页数:27页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第九章 存储空间结构.ppt

上传人:ranfand 2017/3/22 文件大小:1.14 MB

下载得到文件列表

第九章 存储空间结构.ppt

文档介绍

文档介绍:第九章第九章运行时存储空间组织与管理运行时存储空间组织与管理? 引言? 运行时存储空间的结构? 几种存储管理策略? 过程活动记录 AR和栈? 变量访问环境 1 引言引言目标代码中间代码源程序翻译过程特点: (1) 执行过程的直译; (2) 采用抽象地址; 翻译过程特点: (1) 执行过程的具体全部实现; (2) 采用具体地址; (3) 需要考虑运行时存储空间问题; (4) 函数返回地址; 引言引言?为什么要进行存储空间管理?程序执行过程中要访问数据(局部数据、全局数据) ?记录过程/函数调用的控制信息(返回地址、返回值、寄存器状态等)?谁进行管理尽管数据访问和过程/函数调用都发生在目标代码运行时,但编译程序要生成管理存储空间的目标代码?怎么管理具体来讲分别在四元式(CALL, …)、(ENTRY, …)、(ENDFUNC, …)翻译成目标代码时,增加一些管理指令。 3 内存 RAM Code area ( 代码区) Static area ( 静态区) Stack( 栈区) Heap( 堆区)目标代码、库代码常量、静态量、全局量函数的局部数据动态分配的数据 运行时的存储空间结构运行时的存储空间结构目标程序生成之前,编译程序要向操作系统申请一块存储区,用于容纳生成的目标代码及其运行所需的数据空间。低地址高地址 4 几种存储管理策略几种存储管理策略?完全静态分配策略编译时对所有数据对象分配固定的存储单元,且在运行时始终保持不变。?栈式动态分配在运行时把存储器作为一个栈进行管理,运行时,每当调用一个过程,它所需要的存储空间就动态地分配于栈顶,一旦退出该过程,它所占空间就予以释放。?完全动态分配在运行时把存储器组织成堆结构。 5静态存储分配策略静态存储分配策略?如果所有的数据对象在程序执行过程中,地址都是固定的,则可以都分配到静态区中?对程序设计语言的要求: ?没有指针; ?没有动态分配(如C语言中的动态数组); ?没有过程/函数的递归; 6 const int n=5; int sum = 0; int square(int i) { int j; j = i * i; return (j);} void main () { int j; j = square(n); sum = sum+j; } (assign, 0, _, sum) (ENTRY, L1, 3 , 1) (* , i, i, t1) (assign, t1, _, j) (RETURN, _, _, j) (ENDFUN, _, _, _) (ENTRY, L2, 3 , 1) (call, square, true, t2) (assign,t2,-,j) (assign, t3, _, sum) (VALACT, n, 0, 1) (+, sum, j, t3) (ENDFUN, _, _, _) n sum i j t1 j t2 t3 7完全动态的存储分配完全动态的存储分配?程序执行所需空间全部动态分配,将内存按照堆进行管理?释放空间方法: ?显式释放: delete(p) 或free(p) ?隐式释放: ?单指针释放?计数释放法?标记释放法?分配空间方法: 最佳符合法;首次优先法;循环首次优先法 8 const int n=5; int sum = 0; int square(int i) { int j; j = i * i; return (j);} void main () { int j; j = square(n); sum = sum+j; } (assign, 0, _, sum) (ENTRY, L1, 3 , 1) (* , i, i, t1) (assign, t1, _, j) (RETURN, _, _, j) (ENDFUN, _, _, _) (ENTRY, L2, 3 , 1) (call, square, true, t2) (assign,t2,-,j) (assign, t3, _, sum) (VALACT, n, 0, 1) (+, sum, j, t3) (ENDFUN, _, _, _) n sum i j t1 j t2 t3 9栈式动态存储分配策略栈式动态存储分配策略?主要思