Apollo-11:使用包含替代链接器


9

最近被数字化并转换为仓库,原始的Apollo 11指导计算机源代码已可以在Github上查看

MAIN.agc中,回购作者评论说他们

将巨大的整体源代码拆分为更小,更易于管理的块,即单独的源文件。

稍后,作者指出

可能会合理地问,为什么要通过包含的方式连接成千上万行源代码,而不是简单地单独组装源文件,然后将它们链接以形成可执行文件。答案是原始的开发团队没有链接器。

我知道链接器是什么,我理解它们的意思,但我从未听说过“通过包含的方式加入”(就ASM而言)。

这是什么意思?考虑到链接器在编程中起着很大的作用,我很好奇链接器被“包含方式”替代的含义以及它是如何工作的。


7
“通过包含方式加入”的示例是的#include指令C。换句话说,不是将代码bing编译到随后链接在一起的组件上,而是看起来该$符号包括该文件的内容,以便生成一个大型源文件。然后,将那个大的源文件编译为单个实体。
David Arno

1
@DavidArno您的评论似乎比目前板上的两个答案中的任何一个都更好。
Ross Presser

Answers:


18

它们似乎意味着简单的文本串联/插入。换句话说,即使将源文本拆分为单个文件,该程序也不会拆分为modules


-2

简单包含与链接相比如何?

因此,使用#include“ someCFile.c”即可完成简单的包含。

默认情况下,链接器将添加运行时库。如果包含,则必须包含在内。

我怀疑包含会占用较少的空间,因为对象不需要具有包含入口点和可能带有名称的变量的表。在动态链接中,入口点表必须存在。我不确定静态链接是否会删除它,但我怀疑它不会删除。

在处理速度方面,包含可能要快一些(在动态链接库的情况下肯定是这样),但是它不那么灵活,因为多个应用程序不能共享同一个库。

考虑到二进制大小,包含将更大。

考虑到编译时间,包含将花费更长的时间。

对于NASA导航计算机,只需包含一个即可,因为导航计算机仅运行一个程序。


2
我认为这不能回答“它是什么以及它如何工作”的问题。
tofro 16/09/29

tofro:我解释了“这是什么意思?” 从实际的角度来看,在二进制大小和执行速度方面意味着什么。
罗伯特·巴伦

“包容性会更大”-不要明白这一点。如果代码在其中,则它在其中并占用空间-不管它如何进入二进制文件。甚至不同意编译时间-完整的构建将花费相同的时间。你只获得速度增量在做的时候建立,我怀疑这是已经在60ies实践
tofro

由于最小操作系统的所有功能都在可执行文件中,因此执行速度会更快,因此这些只是调用而不是使用中断(我正在考虑使用8086中断的最小操作系统(例如DOS)进行系统调用)。另外,由于将包括整个操作系统,因此与不包括时相比,它将消耗更多的空间,并且会增加编译时间。
罗伯特·巴伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.