Linker 为什么我们要将链接器和加载程序分离成不同的程序

Linker 为什么我们要将链接器和加载程序分离成不同的程序,linker,Linker,伙计们,我想知道为什么我们要把链接器和加载程序分开?据我所知,链接器产生了一个可重定位的代码,还构建了符号表,还提供了有关任何动态链接库的信息,而加载程序只需将可执行文件加载到内存中?为什么我们不能将两者合并 谢谢原因有很多。静态库可能包含数千个不同的函数。但是单个程序可能只使用特定库中的几个函数。如果链接器和加载程序是同一个程序,则必须随应用程序一起提供整个静态库。想想一个小的C++程序,它的大小只有几千字节。它是通过链接静态运行库创建的,静态运行库的大小是很多兆字节 如果需要加载程序进行链接

伙计们,我想知道为什么我们要把链接器和加载程序分开?据我所知,链接器产生了一个可重定位的代码,还构建了符号表,还提供了有关任何动态链接库的信息,而加载程序只需将可执行文件加载到内存中?为什么我们不能将两者合并


谢谢

原因有很多。静态库可能包含数千个不同的函数。但是单个程序可能只使用特定库中的几个函数。如果链接器和加载程序是同一个程序,则必须随应用程序一起提供整个静态库。想想一个小的C++程序,它的大小只有几千字节。它是通过链接静态运行库创建的,静态运行库的大小是很多兆字节


如果需要加载程序进行链接,则会增加加载程序的复杂性并增加操作系统内核的大小。链接是一项非常复杂的工作,需要花费大量时间。这不是操作系统的工作。操作系统应该关注执行程序,而不是构建程序。

原因有很多。静态库可能包含数千个不同的函数。但是单个程序可能只使用特定库中的几个函数。如果链接器和加载程序是同一个程序,则必须随应用程序一起提供整个静态库。想想一个小的C++程序,它的大小只有几千字节。它是通过链接静态运行库创建的,静态运行库的大小是很多兆字节


如果需要加载程序进行链接,则会增加加载程序的复杂性并增加操作系统内核的大小。链接是一项非常复杂的工作,需要花费大量时间。这不是操作系统的工作。操作系统应该关注执行程序,而不是构建程序。

您在这里谈论的是哪种语言?可执行文件不需要任何加载程序。你在这里说的是哪种语言?可执行文件不需要任何加载程序。总而言之(如果我错了,请纠正我),加载是由操作系统完成的,因此为了减少操作系统花费的时间,我们应该将链接器和加载程序分开。@hue:这是我的论点的要点,尽管不是全部。有些系统(比如嵌入式系统或移动设备)没有资源进行链接。此外,还有数据大小问题;提供一个10千字节的完整构造的程序映像比提供一个5千字节的对象文件和多兆字节的静态库更容易。总而言之(如果我错了,请纠正我),加载是由操作系统完成的,因此为了减少操作系统花费的时间,我们应该将链接器和加载程序分开。@hue:这是我的论点的要点,虽然不是全部。有些系统(比如嵌入式系统或移动设备)没有资源进行链接。此外,还有数据大小问题;提供一个10千字节的完全构造的程序映像比提供一个5千字节的对象文件和多兆字节的静态库更容易。