为什么我们将链接器和加载器分成单独的程序

时间:2011-01-22 18:50:45

标签: linker

伙计我想为什么要将链接器和加载器编程分开?我的理解是链接器生成一个可重定位的代码,并且还构建了符号表,并提供了有关任何动态链接的lib的信息,并且加载器只是将可执行文件加载到内存中?为什么我们不能将它们合并?

由于

1 个答案:

答案 0 :(得分:5)

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

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