链接器与加载器背后的静默运作机制

本文深入浅出地解析了链接器与加载器的工作原理,追溯其从1947年ENIAC时代的雏形发展至今的历史,阐释了程序重定位、库搜索等核心概念如何成为现代软件开发不可或缺的基石。

1947年,ENIAC计算机的设计者之一约翰·莫奇利发表了一篇短文,探讨了一个耐人寻味的问题:如何将一个存储在磁带上的子程序,放置到内存中的其他位置,并仍然让它运行?这只是一个对实际问题的简单陈述,但其内部却隐藏着当今每位软件开发者都依赖的某些东西的种子。莫奇利当时描述的正是重定位库搜索,这两个理念最终构成了链接器和加载器的基础。

早期的数字计算机没有汇编器,没有符号语言,当然也没有链接器。程序不过是一串数字操作码和字面内存地址的序列。如果程序员插入或删除了一条指令,后续的所有地址都必须手动重新计算。仅仅因为一个小的算术错误,数小时的工作就可能付诸东流。在这种条件下,可重用子程序的概念不仅是一种便利,更是一种挑战。一段代码无法轻易地从内存中的一个位置移动到另一个位置,因为其内部的每一个绝对地址都会是错误的。可重定位子程序的概念——即无需重写其地址即可重用的代码——在当时是一个全新的想法。

莫奇利的备忘录出现在EDVAC(ENIAC的继任者,也是首批采用存储程序概念的设计之一)的开发期间。与ENIAC需要为新任务重新布线不同,EDVAC将数据和指令都保存在内存中。这种新的灵活性带来了新的问题。如果一个程序可以被…

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计