- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第十二讲运行时组织
2016-12-14
目标程序在目标机环境中运行时,都置身于自己的一个运行时空间。通常,在有操
作系统的情况下,目标程序将在自己的逻辑地址空间内和运行。这样,编译程序在生成
目标代码时应该明确程序的各类对象在逻辑地址空间内是如何的,以及目标代码运行时
间的典型布局,以及常见的运行时分配策略。然后,我们重点讨论实现栈式分配时
栈帧(即活动记录)的组织。随后,我们讨论实现过程调用中参数传递的话题。最后,我们
就面向对象程序的运行时组织的有关问题进行讨论。
1.运行时组织的作用与任务
编译程序所产生的目标程序本身的大小通常是确定的,一般被存放在指定的区
域,即代码区。相应地,目标程序运行过程中需要创建或的数据对象将被存放在数据区。
数据对象包括用户定义的各种类型名对象(如变量和常量)、作为保留中间结果和传递
参数的临时对象及调用过程时所需的连接信息等。
语言特征的差异对于组织方面的不同需求往往取决于数据对象的分配。因此,
在这一讲里,我们讨论主要内容是面向数据对象的运行时组织与管理。以下列举了运行
时组织通常所关注的几个重要问题:
数据对象的表示。需要明确源语言中各类数据对象在目标机中的表示形式。
表达式计算。需要明确如何正确有效地组织表达式的计算过程。
分配策略问题是如何正确有效地分配不同作用域或不同生命周期的数据
对象的。
过程实现。如何实现过程/函数调用以及参数传递。
数据对象在目标机中通常是以字节(byte)为单位分配空间。例如,对于基本数据
类型,我们可以设定基本数据对象的大小为:char数据对象,1个字节;integer数据对象,
4个字节;float数据对象,8个字节;boolean数据对象,1个字节。对于指针类型的数据对
象,通常分配1个单位字长的空间,如在32位机器上1个单位字长为4个字节。
对于数据对象的存放,不同的目标机可能在某些方面有不同的要求。例如,一些机器中
的数据是以大端(bigendian)形式存放,而另一些机器中的数据则是以小端(littleendian)
形式存放。许多机器会要求数据对象的地址以一定方式对齐(alignment),如必须
可以被2,4,8等整除,这种情况下某些字节数不足的数据对象在存放时需要考虑留白
(padding)处理。
复合数据类型的数据对象通常根据它的组成部分依次分配空间。对于数组类型的数
据对象,通常是分配一块连续的空间。对于数组,可以按行进行存放,也可以按列
进行存放。对于结构体类型,通常以各个域为单位依次分配空间,对于复杂的域数据对
象可以另辟空间进行存放。对于对象类型(类)的数据对象,实例变量像结构体的域一样存
放在一块连续的区,而方法(成员函数)则是存放在其所属类的代码区。
表达式计算是程序状态变化的根本,频繁涉及到的操作。通常,表达式计
算是利用栈区完成的,临时量和计算结果(或指向它们的指针)的
文档评论(0)