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

hue*_*hue 0 linker

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

谢谢

Jim*_*hel 5

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

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

  • 总结一下(如果我错了,请纠正我)加载是由操作系统完成的,因此为了减少操作系统花费的时间,我们应该将链接器和加载器分开。 (2认同)