【发布时间】:2015-12-05 16:53:29
【问题描述】:
在对编译器及其工作原理进行了一些研究后,我了解到该过程通常分为 4 个步骤:预处理器、编译器、汇编器和链接器。我设想这些步骤的方式是每个步骤都是它自己的单独程序。预处理程序、编译程序、汇编程序和链接程序。但是,您了解到有时创建汇编代码和生成目标文件的过程都由编译器程序处理,有时则不是。它似乎在很大程度上取决于所使用的上下文和编程语言。那么我的问题是如何分解将 C++ 源代码翻译成机器代码的典型翻译过程?
- 预处理器是独立于编译器的程序吗?还是该过程通常是编译器程序的一部分?
- 编译器通常负责什么?生成汇编代码,然后转换为机器码?
- 链接器是编译器完成后运行的独立程序吗?
旁注:我的问题与其他 C++ 编译器线程不同,因为我不仅要问编译器是如何工作的,还要问某些其他进程(例如链接)是否有自己的可执行程序,或者它们是否通常内置于编译器中程序。
【问题讨论】:
-
预处理器、前端、后端(代码生成器和优化器)、链接器。今天仍然很少使用汇编程序,太慢了。实际上不再那么直截了当,编译器可以在前端停止并生成中间代码。由链接器消耗,可以启动后端实现全程序优化。
-
“今天很少使用汇编程序”很好,显然今天没有人使用 gcc。或者带有目标的 llvm,它不带有集成的汇编器。或者其他几个...
-
请注意,该序列仅适用于一个编译/翻译单元。构建控制(例如 make)是第一步。
标签: c++ compiler-construction linker machine-translation