链接器和加载器02.pdfVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
链接器和加载器02,链接器和加载器,链接器和加载器pdf,加载动态链接库失败,b站播放器无法加载,类加载器,java类加载器,谷歌浏览器加载插件,自动加载字幕的播放器,浏览器无法加载插件

第 2 章 体系结构的问题 $Revision: 2.3 $ $Date: 1999/06/15 03:30:36 $ 链接器和加载器,以及编译器和汇编器,与体系结构的细节密切相关,这包括硬件体 系结构和操作系统对目标计算机在体系结构方面的约定。本章中我们将会涉及足够的计算机 体系结构知识以理解链接器必须做的工作。本章所有对计算机体系结构的描述是经过考虑而 有所删减的,例如浮点和 I/O 这些不影响链接器的部分就去掉了。 硬件体系结构的两个方面影响到链接器:程序寻址和指令格式。链接器需要做的事情 之一就是对数据和指令中的地址及偏移量都要进行修改。两种情况下链接器都必须确保所做 的修改符合计算机使用的寻址方式;当修改指令时还需要进一步确保修改结果不能是无效指 令。 在本章结尾,我们还会讨论地址空间架构,即程序运行时需要处理的地址集合。 应用程序二进制接口 每个操作系统都会为运行在该系统下的应用程序提供应用程序二进制接口 (Applicatio n Binary Interface )。ABI包含了应用程序在这个系统下运行时必须遵守的编程约定。ABI 总是包含一系列的系统调用和使用这些系统调用的方法,以及关于程序可以使用的内存地址 和使用机器寄存器的规定。从一个应用程序的角度看,ABI既是系统架构的一部分也是硬件 体系结构的重点,因此只要违反二者之一的条件约束就会导致程序出现严重错误。 在很多情况下,链接器为了遵守 ABI 的约定需要进行一些重要的工作。例如,ABI要求 每个应用程序包含一个该程序中各例程使用的所有静态数据的地址表,链接器通常会通过收 集所有链接到程序中的模块的地址信息来创建这个表。ABI经常会影响链接器的是对标准过 程调用的定义,本章稍后会讨论这个话题。 内存地址 计算机系统都有主存储器。主存总是表现为一块连续的存储空间,每一个存储位置都 有一个数字地址。这个地址从 0 开始,并逐渐增长为某个较大的数字(由地址中的位数决 定)。 字节顺序和对齐 每个存储位置都是由固定数量的数位(bit )组成的。经过将近 50年的历史,由64 位 到 1位组成的计算机存储位置都被设计过,但现在几乎所有产品化的计算机都使用 位(1 字节)的地址。由于计算机处理的大多数数据,尤其是程序地址,都是大于 位的,所以通 过将相邻的字节合为一组,计算机同样可以很好的处理 16位、32位、64 位或 12 位的数据。 在某些计算机上,尤其是 IBM 和Motorola,多字节数据的第一个字节(数字地址最低 )是高 位字节(most significant byte ),在其它诸如 DEC 和 Intel 的机器上,第一个字节是低位 字节(least significant byte ),如图 1所示。沿用”格列佛游记”中的典故,将 IBM/Mo torola 的字节序策略称为 big-endian,而DEC/Intel 的字节序策略称为 little-endian。 图2-1 内存地址定位 内存地址的图示 由两种方案的优缺点引起的激烈讨论已经持续了很多年了。由于在两台字节序相同的 机器间移植程序要比不同字节序的机器要容易的多,所以实际中对字节序选择的主要考虑来 自于对旧系统的兼容。新近的很多芯片设计可以支持任何一种字节序,这可以在芯片布线时 进行选择,也可以在系统引导时通过编程选择,甚至某些情况下可以针对每个应用程序进行 不同选择。(在这些可切换的芯片上,被加载和存储指令处理的数据的字节序会发生变化, 但是被编码到指令中的常量的字节序是不变的,这是一些可以让链接器作者的工作变得很有 趣的细节) 多字节数据通常会被对齐到一些 “天生”的边界上。就是说,4 字节的数据必须对齐到 4 字节的边界上,2字节要对齐到 2字节的边界上,并以此类推。另一种想法就是任何 N 字 节数据的地址至少要有 log (N)个低位为 0。在某些系统上 (Intel X 6,DEC VAX,IBM 370/ 2 390 ),引用未对齐数据会付出性能降低的代价,在另外一些系统上 (多数RISC 芯片 ),这 会导致程序故障。即使在那些引用未对齐数据不会导致故障的系统上,性能的损失也是非常 大的,以至于值得我们花费精力来尽可能保持地址的对齐。 很多处理器同样要求程序指令的对齐。多数RISC 芯片要求指令必须对齐在 4 字节的边 界上。 每种体系结构都定义了一系列的寄存器

文档评论(0)

wdhao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档