深入理解计算机系统(第3版) 第七章 链接

1.链接

链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。

链接可以执行于编译时,也就是在源代码被翻译成机器代码时;也可以执行于加载时,也就是在程序被加载器加载到内存并执行时;甚至执行于运行时,也就是由应用程序来执行。

在早期的计算机系统中,链接是手动执行的。在现代系统中,链接是由叫做链接器的程序自动执行的。

 

2.链接器

链接器在软件开发中扮演一个关键的角色,因为它们使得分离编译成为可能。我们不用将一个大型的应用程序组织为一个巨大的源文件,而是可以把它分解为更小、更好管理的模块,可以独立地修改和编译这些模块。当我们改变这些模块中的一个时,只需简单的重新编译它,并重新链接应用,而不必重新编译其他文件。

 

3.编译器驱动程序

大多数编译系统提供编译器驱动程序,它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。

 

4.目标文件

目标文件有三种形式:

-->可重定位目标文件:包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。

-->可执行目标文件:包含二进制代码和数据,其形式可以被直接复制到内存并执行。

-->共享目标文件:一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态地加载进内存并链接。

编译器和汇编器生成可重定位目标文件(包括共享目标文件),链接器生成可执行目标文件。

 

5.与静态库链接

迄今为止,我们都是假设链接器读取一组可重定位目标文件,并把它们链接起来,形成一个输出的可执行文件。实际上,所有的编译系统都提供一种机制,将所有相关的目标模块打包成为一个单独的文件,称为静态库(static library),它可以用作链接器的输入。当链接器构造一个输出的可执行文件时,它只复制静态库里被应用程序引用的目标模块。

 

6.动态链接共享库

静态库解决了许多关于如何让大量相关函数对应用程序可用的问题。然而,静态库仍然有一些明显的缺点,静态库和所有软件一样,需要定期维护和更新,如果应用程序员想要使用一个库的最新版本,他们必须以某种方式了解到该库的更新情况,然后显示地将他们的程序与更新了的库重新链接。

另一个问题是几乎每个C程序都使用标准I/O函数,比如printf和scanf。在运行时,这些函数的代码会被复制到每个运行进程的文本段中。在一个运行上百个进程的典型系统上,这将是对稀缺的内存系统资源的极大浪费。(内存的一个有趣属性就是不论系统的内存有多大,它总是一种稀缺资源。磁盘空间同样拥有这样的属性)

共享库是致力于解决静态库缺陷的一个现代创新产物。共享库是一个目标模块,在运行或加载时,可用加载到任意的内存地址,并和一个在内存中的程序链接起来。共享库也称为共享目标。

共享库是以两种不同的方式来‘共享’的:首先,在任何给定的文件系统中,对于一个库只有一个.so文件,所以引用该库的可执行目标文件共享这个.so文件中的代码和数据,而不是像静态库的内容那样被复制和嵌入到引用它们的可执行的文件中。其次,在内存中,一个共享库的.text节的一个副本可以被不同的正在运行的进程共享。

 

第七章小结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《深入理解计算机系统(原书第3)》是由Randal E.Bryant和David O'Hallaron编写的一本计算机系统基础知识的经典教材。本书共分为十二章,内容包括计算机系统组成、汇编语言程序设计、内存层次结构、虚拟存储器、链接器和加载器、异常控制流、处理器体系结构、优化程序性能、并行程序设计、网络编程、安全性和隐私保护等方面。 本书把计算机系统作为软件、硬件和操作系统三者之间相互交互的系统,详细介绍了计算机硬件、操作系统和应用程序之间的交互过程和内部结构,并通过实际案例和代码演示的方式生动形象地展示了计算机系统的运作原理和主要功能。在阅读本书的过程中,读者可以深入了解计算机系统的底层运作过程和性能优化技术,同时也可以了解操作系统、底层编程和网络编程等领域的实践技巧和实用工具。 《深入理解计算机系统(原书第3)》在计算机科学、数据科学、信息安全等领域的教学、研究和实践中被广泛应用。无论是学习计算机系统基础知识的初学者,还是从事计算机系统开发和优化的专业人士,都可以通过阅读本书深入理解计算机系统的工作原理和优化方法。 ### 回答2: 《深入理解计算机系统》是一本经典的计算机科学教材,作者为布赖恩·卡尼汀汉姆、黄永琪、里查德·斯蒂文斯。本书内容以计算机系统的原理和运作机制为核心,旨在帮助读者深入理解计算机系统的各个方面,包括指令集、CPU、内存、I/O、文件系统、虚拟内存、链接、优化等。 本书首先介绍了计算机硬件和软件的基本组成,包括数字逻辑、CPU结构和指令集、存储层次结构、输入输出设备、操作系统等。接着,本书深入剖析了一些计算机系统设计的关键问题,如内存层次结构、高速缓存、虚拟内存、动态内存分配等。此外,本书还介绍了链接和装载、优化程序的方法和技巧、多处理器系统等高级话题。 《深入理解计算机系统》的主要特点是结合了理论和实践,用通俗易懂的语言讲解了计算机系统的复杂原理,同时通过大量的实例、代码、命令行操作等方式,让读者具体理解计算机系统的各个层次和组成部分。书中还有大量的习题,可以帮助读者检验和提高对知识点的理解。此外,作者还为本书提供了相关的课件和代码,方便读者更好的学习和运用。 总之,《深入理解计算机系统》是一本值得计算机科学学习者和工程师深入阅读和反复研读的书籍,可以帮助读者全面而深入的了解计算机系统的各个方面。 ### 回答3: 《深入理解计算机系统(原书第3) pdf csdn》是一本计算机科学方面的经典教材,该书从底层到高层层次逐步介绍了计算机系统的各个组成部分以及它们之间的相互作用与影响,旨在帮助读者更深入、全面地理解计算机系统的构成和工作原理。 该书主要分为三个部分,分别是程序结构和执行、操作系统和网络编程,每个部分又包括若干个章节,介绍了计算机科学中与计算机系统相关的知识点和技术。 其中,程序结构和执行部分主要介绍了计算机处理器的运作原理、程序的编译、链接和优化、内存的管理以及输入输出的操作等问题;操作系统部分介绍了操作系统的基本功能和组成、进程管理、文件系统的设计、虚拟内存的实现等内容;网络编程部分则介绍了网络协议的工作原理、套接字编程、web服务的实现等技术。 通过学习该教材,读者可以深入理解计算机系统的底层架构和运行原理,掌握操作系统和网络编程的基本知识和技能,从而更好地开发、调试和优化计算机程序和系统。同时,该教材也提供了丰富的练习题和实验项目,供读者进行实践和巩固知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值