![]() |
1
13
效率。 编译程序时,为每个源文件创建一个对象文件,如果更改源文件,则只需重新编译该模块,然后重新链接(重新链接很便宜)。 如果编译器在一次传递中完成了所有操作,那么它将必须为每个更改重新编译所有内容。 它还符合小程序的Unix原理,即只做一件事,所以您有一个预处理器、一个编译器、一个链接器、一个库创建者。这些步骤现在可能是同一工具的不同模式。 但是,您希望编译器在一个步骤中链接的原因是,如果允许编译器在链接时更改对象文件,则可以进行一些优化-大多数现代编译器都允许这样做,但它要求它们在编译时将额外的信息放入对象文件中。 如果编译器可以将整个项目存储在一个数据库中,而不是混乱的源、资源、浏览信息文件、对象文件等,那就更好了——但是开发人员非常保守! |
![]() |
2
2
这是历史的一部分。在黑暗时代,计算机的内存很小。用足够的源代码创建一个程序很容易,所有的源代码都不能一次处理。因此,处理必须分阶段完成:预处理源代码、将源代码编译到程序集(逐个)、将程序集编译到对象代码、将所有对象文件链接到最终可执行文件。每个步骤都有一个或多个独立的工具来完成其任务。这些年来,这些工具逐渐得到了改进,但没有一个主要的流程重新设计成为主流。 |
![]() |
3
2
重要的是,构建时间,即使对于一个非常大的项目,也要少于24小时。能在一夜之间建造更好。 单独汇编 也就是说,将一个程序划分为“编译单元”,并独立地编译它们,是减少构建时间的方法:
链接本身几乎没有什么好处,但是使用单独编译的结果是必要的。 |
![]() |
4
2
多好的时间来教你的专家关于单一责任原则! |
![]() |
5
-3
编译文件会将代码更改为计算机可以读取的二进制代码。链接文件告诉计算机如何完成命令。因此,如果没有这两个步骤,就不可能一次生成全部内容。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |