欢迎来到天天文库
浏览记录
ID:50337951
大小:396.50 KB
页数:52页
时间:2020-03-08
《编译原理 教学课件 作者 王生原 董渊 杨萍 张素琴 slide10.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、运行时存储组织第十讲运行时存储组织运行时存储组织的作用与任务存储分配策略程序运行时存储空间的布局活动记录过程调用与参数传递面向对象程序运行时组织(选讲)运行时存储组织运行时存储组织的作用与任务代码生成前如何安排目标机存储资源的使用几个重要问题数据表示目标机中如何表示源语言中各类数据对象表达式计算如何组织表达式的计算存储分配如何为不同作用域或不同生命周期的数据对象分配存储过程实现如何实现过程/函数调用以及参数传递运行时存储组织数据表示源程序中数据对象在内存或寄存器中的表示形式源程序中数据对象的属性名
2、字(name),类型(type),值(value),复合数据对象(component),……数据对象在内存或寄存器中的表示形式位、字节、字、字节序列、……有些机器要求数据存放时要按某种方式对齐(align)如:要求数据存放的起始地址为能够被4整除运行时存储组织数据表示举例基本类型数据char数据1byteinteger数据4bytesfloat数据8bytesboolean数据1byte指针4bytes数组一块连续的存储区(按行/列存放)结构/记录所有域(field)存放在一块连续的存储区对象实例
3、变量像结构的域一样存放在一块连续的存储区,操作例程(方法、成员函数)存放在其所属类的代码区运行时存储组织表达式的计算在何处进行计算在栈区计算运算数/中间结果存放于当前活动记录或通用寄存器中在运算数栈计算某些目标机采用专门的运算数栈用于表达式计算对于普通表达式(无函数调用),一般可以估算出能否在运算数栈上进行使用了递归函数的表达式的计算通常在栈区运行时存储组织程序运行时存储空间的布局(layout)典型的程序布局保留地址区目标机体系结构专用代码区静态存放目标代码静态数据区静态存放全局数据库和分别编译
4、模块区静态存放这些模块的代码和全局数据动态数据区运行时动态变化的堆区和栈区ReservedLocationsCodeStaticDataLibraryandSeparateModulesStackSpaceHeapSpaceLowestaddressHighestaddress运行时存储组织存储分配策略静态分配在编译期间为数据对象分配存储动态分配栈式分配将数据对象的运行时存储按照栈的方式来管理堆式分配从数据段的堆空间分配和释放数据对象的运行时存储运行时存储组织静态存储分配在编译期间就可确定数据
5、对象的大小不宜处理递归过程或函数某些语言中所有存储都是静态分配如汇编语言,早期的FORTRAN语言多数语言只有部分存储进行静态分配可静态分配的数据对象如大小固定且在程序执行期间可全程访问的全局变量,以及程序中的常量(literals)如C++中的static变量运行时存储组织栈式存储分配用于有效实现可动态嵌套的程序结构如实现过程/函数,块层次结构可以实现递归过程/函数比较:静态分配不宜实现递归过程/函数运行栈中的数据单元是活动记录(activationrecord)(专门介绍)运行时存储组织堆式存
6、储分配从堆空间为数据对象分配/释放存储灵活数据对象的存储分配和释放不限时间和次序显式的分配或释放(explicitallocation/dealocation)程序员负责应用程序的(堆)存储空间管理(借助于编译器和运行时系统所提供的默认存储管理机制)隐式的分配或释放(implicitallocation/dealocation)(堆)存储空间的分配或释放不需要程序员负责,由编译器和运行时系统自动完成运行时存储组织堆式存储分配某些语言有显式的堆空间分配和释放命令如:Pascal中的new,depos
7、itC++中的new,delete比较:C语言没有堆空间管理机制,malloc()和free()是标准库中的函数,可以由libraryvendor提供某些语言支持隐式的堆空间释放采用垃圾回收(garbagecollection)机制如:Java程序员不需要考虑对象的析构运行时存储组织堆式存储分配不释放堆空间的方法只分配空间,不释放空间,空间耗尽时停止适合于堆数据对象多数为一旦分配,永久使用的情形在虚存很大及无用数据对象不致带来很大零乱的情形也可采用运行时存储组织堆式存储分配显式释放堆空间的方法用户
8、负责清空无用的数据空间(通过执行释放命令)堆管理程序只维护可供分配命令使用的空闲空间问题:可能导致灾难性的danglingpointer错误例:Pascal代码片断C++代码片断varp,q:^real;…new(p);q:=p;dispose(p);q^:=1.0;float*p,*q;…p=newfloat;q=p;deletep;*q:=1.0;运行时存储组织堆式存储分配隐式释放堆空间的方法主要技术:垃圾回收(garbagecollection)机制(可以分专门的话题讨论,超
此文档下载收益归作者所有