Linkers and Loaders 00

从1947年的最初装载器到现代链接器,本文回顾了链接器与装载器的技术演进过程。介绍了链接器如何从简单的程序整合工具发展成为支持动态链接和复杂处理器架构的关键组件。
 
Chapter 00:前言
介绍:
自从有计算机开始,链接器(Linkers)和装载器(Loaders)就已经是必要软件包的一部分了,因为它们是模块化程序设计的关键工具。
早在1947年,程序员开始使用最初的装载器,把存储在各个磁带(Tapes)里的指令整合并重定位成可执行程序。到了60年代,这些装载器则进化成了成熟的链接编辑器。由于当时的内存相当昂贵和稀少,并且计算机的速度也很慢(以现在的标准),这些链接器有复杂的属性设置来处理内存重叠的数据结构,以便把大程序加载到小内存,并尽量减少运行的额外消耗。
从70年代到80年代,链接技术没有什么发展。链接器甚至变得更简单了,因为虚拟内存技术把大部分的内存管理工作从应用程序转移到了操作系统,并且随着计算机越来越快,磁盘空间越来越大,从重新创建一个链接好的程序文件比节省空间重新链接要容易的多。但是到了90年代,链接器又变复杂了,添加了许多新属性,例如动态链接共享库(dynamically linked shared libraries)和支持C++语言的一些特殊要求。同时现在最新的处理器结构,复杂的指令系统,和编译器托管(compiler-scheduled)的内存管理,例如IA64,将对链接器提出新的挑战,使链接程序代码更复杂。
工程简介:
从第3章到第11章用Perl语言建立了一个小而功能强大的链接器工程。虽然在商用链接器开发中不大可能使用Perl语言,但是作为教程却很好。与C或C++不同,Perl自动处理了许多低级的编程细节,使学生能集中处理算法和数据结构问题。Perl在大多数计算机上也是可以免费使用的,包括Windows 95/98和NT,Unix和Linux,并且有许多好的语言教材。
在第3章的初始工程里,建立了一个链接器的框架,能读写文件,生成简单而完整的目标文件格式。后续的章节加入许多的功能直到最后成为一个成熟的链接器,支持共享库(shared libraries),和生成可动态链接的目标(dynamically linkable objects)。
Perl还能很好的处理任意的2进制文件和数据结构,该链接器稍作修改就能处理本地目标格式(native object formats)。 
### 回答1: Linkers and Loaders是指链接器和装载器,是计算机领域中的一种重要工具,主要用于将程序的各个部分合并在一起并最终加载到内存中运行。 链接器的主要工作是将多个目标文件合并成一个可执行文件。目标文件包含机器语言指令和符号表信息,链接器将各个目标文件的符号表信息进行合并,并解决模块之间的引用问题,使得程序能正确地执行。 装载器的主要工作是将可执行文件加载到计算机的内存中运行。装载器将可执行文件中的各个段按照一定的地址空间进行装载,并进行重定位等操作,确保程序能够在内存中正确执行。 总之,链接器和装载器是构建可执行程序需要用到的重要工具,对于程序的可靠性、效率和安全性都具有重要作用。 ### 回答2: linkers and loaders是计算机科学中用于程序编译的工具。Linkers在编译过程中将多个目标文件合并成一个可执行文件,同时也会解决外部和内部符号的引用问题。Loaders则是将可执行文件加载到内存中,并把符号解析成运行时地址,最终使程序在计算机上运行。 linkers在编译过程中实现了模块化编程,将单独编写的多个目标文件链接在一起。linkers将程序中各个部分之间的符号和引用关系整合在一起,实现一个完整的可执行程序。linkers主要有静态链接和动态链接两种形式,静态链接将库文件直接合并到可执行文件中,而动态链接则是在程序运行时动态加载库文件。 loaders则负责将可执行文件从磁盘加载到内存中去。借助加载器,操作系统可以根据可执行文件中文件头和段表信息将程序映射到内存中的相应地址,方便操作系统进行命令的调用和运行。 总之,linkersloaders是编译过程中非常重要的组成部分。它们不仅使编译工作更加高效和灵活,同时也是计算机开发中程序正确性和性能的关键。 ### 回答3: linker是编译后的程序中用来处理符号链接的工具。它的作用是将不同程序模块(source file, object file)之间的符号联系起来。在链接过程中,linker会分析程序中使用到的符号,并将这些符号与其对应的地址进行关联,以便程序中的不同模块能够相互调用。同时,linker也会将所有的模块组合成一个可执行文件,方便程序的执行。 loader是将程序加载入内存并实现分页与映射的软件。loader的主要作用是将程序文件从磁盘上读入内存,并根据程序的逻辑要求,将其按照合适的方式映射到内存中的合适位置。同时,loader还负责分配与管理程序所需要的内存空间,维护程序在内存中的状态,以及实现程序的执行。 在计算机科学领域中,linkersloaders是非常重要的工具。它们帮助编程人员将不同的程序模块链接起来,并在不同的系统中进行适当的加载。对于任何一个开发者而言,了解和掌握linkersloaders都是非常重要的基本技能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值