链接器和加载器之间的区别

作者: Laura McKinney
创建日期: 3 四月 2021
更新日期: 7 可能 2024
Anonim
001 深入详解JVM之类加载器深度剖析、类的主动使用、被动使用
视频: 001 深入详解JVM之类加载器深度剖析、类的主动使用、被动使用

内容


链接程序和装载程序是在程序执行中起主要作用的实用程序。程序的源代码在执行之前按各自的顺序经过编译器,汇编器,链接器,加载器。一方面, 连接器 提取由汇编器生成的目标代码,并将其组合以生成可执行模块。另一方面, 装载机 将此可执行模块加载到主存储器中以执行。让我们借助比较表来讨论Linker和loader之间的区别。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础连接器装载机
基本的它生成源程序的可执行模块。它将可执行模块加载到主存储器。
输入项它以汇编程序生成的目标代码为输入。它需要链接器生成的可执行模块。
功能它结合了源代码的所有目标模块以生成可执行模块。它将地址分配给主存储器中的可执行模块以执行。
类型/方法链接编辑器,动态链接器。绝对加载,可重定位加载和动态运行时加载。

链接器的定义

汇编器生成源程序的目标代码,并将其交给链接器。链接器采用此目标代码并生成 可执行代码 程序,并将其移交给加载程序。

高级语言,程序有一些 内置库头文件。源程序可能包含一些库函数,其定义存储在内置库中。链接器将这些功能链接到内置库。如果找不到内置库,它将通知编译器,然后编译器将生成错误。

有时,大型程序会分为子程序,这些子程序称为 模组。现在,当这些模块被编译和组装时,将生成源程序的目标模块。链接器负责组合/链接所有对象模块以生成源程序的单个可执行文件。我们有两种类型的链接器。


链接编辑器:这是一个链接器,可生成可重定位的可执行模块。

动态链接器:延迟/延迟某些外部模块的链接,直到生成加载模块/可执行模块。在这里,链接是在加载时间或运行时间完成的。

装载机的定义

由于当前必须执行的程序必须驻留在计算机的主内存中。这是 装载机 操作系统中的程序,以将链接器生成的程序的可执行文件/模块加载到主存储器中以执行。它将内存空间分配给主内存中的可执行模块。

有三种加载方法:

  • 绝对加载
  • 可重载
  • 动态运行时加载

绝对加载:此方法将程序的可执行文件加载到 相同的主内存位置 每一次。但是它有一些 缺点 像程序员一样,必须知道将模块加载到主存储器的分配策略。如果要修改程序,并在程序中进行一些插入和删除,则必须更改程序的所有地址。

可重载: 用这种方法,编译器或汇编器会 不产生实际的主内存地址。它产生相对地址。

动态运行时加载:在这种方法中,当实际执行可执行模块的指令时,将生成程序的绝对地址。它非常灵活,可以将可加载模块/可执行模块加载到 主内存的任何区域。正在执行的程序可以在两者之间被中断,并且可以这次被换出到磁盘,然后又换回到主存储器中的另一个主存储器地址。

  1. 链接器和加载器之间的主要区别在于,链接器生成 可执行文件 程序的文件,而加载器将从链接器获得的可执行文件加载到 执行的主内存.
  2. 链接器摄入 对象模块 汇编程序生成的程序。但是,装载机会 可执行模块 由链接器生成。
  3. 链接器组合程序的所有对象模块以生成 可执行模块 它还链接了 库功能 在对象模块中 内置库 高级编程语言。另一方面,装载机 为可执行文件分配空间 主存储器中的模块。
  4. 链接器可以分类为 链接编辑器, 动态链接器 而加载程序可以归类为 绝对装载机,可重定位装载机 动态运行时加载器.

结论:

链接器从汇编器中获取程序的目标模块,并将它们链接在一起以生成程序的可执行模块。然后,可执行模块由加载器加载到主存储器中以执行。