主要区别
链接器和加载程序的区别在于,链接器生成源程序的可执行模块,而加载程序将可执行模块加载到主内存中。
连接器(linker) vs. 装载机(loader)
有一些实用程序在任何程序的执行中起主要作用;有两种类型的实用程序,即链接器和加载程序。程序的任何源代码都必须经过编译器、汇编程序、链接器、装入器,这是任何程序执行的顺序。链接器接收汇编程序生成的目标代码,并将它们组合起来生成可执行模块。另一方面,Loader将可执行模块加载到主内存以执行。必须执行的程序存在于主存中。加载程序,加载操作系统中的可执行文件。加载器将内存空间分配给主内存中的可执行模块。加载程序有三种类型:绝对加载程序、可重定位加载程序和动态运行时加载程序。这三种装载机有不同的装载方式,分别是绝对装载法、浮动装载法和动态运行时装载法
汇编程序和编译器不是同一个进程,但它们所做的工作是相同的,即生成源程序的目标代码并将其交给链接器。链接器的主要过程是在完成链接器的这项工作后,获取目标代码并生成程序的可执行代码,并将代码分配给加载程序。在高级语言中有一些内置库和头文件。有一些库函数是在内置库中定义的。绝对加载器将程序的可执行文件加载到相同的主内存位置。在绝对加载器中,程序员必须知道分配。重新定位加载程序编译或汇编实际的主内存地址。动态运行时加载器,执行指令时生成绝对内存程序。函数通过链接器链接到库函数。如果找不到特定函数的库函数,则会通知编译器。当有一个大程序时,它被分成更小的程序,这些程序称为模块。对象模块是在编译或组装这些模块时生成的。链接器必须将整个程序组合在一起。有两种类型的链接器一种是链接编辑器,它生成重新定位的可执行模块,另一种是动态链接器,链接外部模块,直到生成加载模块。
比较图
什么是连接器(linker)?
汇编程序和编译器不是同一个进程,但它们所做的工作是相同的,即生成源程序的目标代码并将其交给链接器。链接器的主要过程是在完成链接器的这项工作后,获取目标代码并生成程序的可执行代码,并将代码分配给加载程序。在高级语言中有一些内置库和头文件。有一些库函数是在内置库中定义的。这些函数通过链接器链接到库函数。如果找不到特定函数的库函数,则会通知编译器。当有一个大程序时,它被分成更小的程序,这些程序称为模块。对象模块是在编译或组装这些模块时生成的。链接器必须将整个程序组合在一起。有两种类型的链接器一种是链接编辑器,它生成重新定位的可执行模块,另一种是动态链接器,链接外部模块,直到生成加载模块。
什么是装载机(loader)?
必须执行的程序存在于主存中。加载程序,加载操作系统中的可执行文件。加载器将内存空间分配给主内存中的可执行模块。加载程序有三种类型:绝对加载程序、可重定位加载程序和动态运行时加载程序。这三种加载方式有绝对加载方式、浮动加载方式和动态运行时加载方式。绝对装入器将程序的可执行文件加载到相同的主内存位置。在绝对加载器中,程序员必须知道分配。重新定位加载程序编译或汇编实际的主内存地址。动态运行时加载器,执行指令时生成绝对内存程序。
主要区别
- 链接器生成源程序的可执行模块,而加载程序将可执行模块加载到主内存中。
- 链接器接收汇编程序输入的目标代码,而加载程序获取可执行模块必须输入的代码
- 链接器组合了所有的对象模块,而Loader将地址分配给一个可执行文件。
- 链接器的类型有链接编辑器和动态编辑器,而加载程序的类型是绝对加载程序、动态运行时加载程序和重新定位加载程序。