用一个简单的c ++程序编译过程
这个问题在这里已经有了答案:
这是一个非常广泛的问题,但我会尽可能简短地回答。 典型的语言处理系统有以下几个阶段:
1.预处理阶段 - 在这个阶段中,所有的预处理器和宏都被处理,并且代码被生成,而这些代码是没有这些的。 这涉及用宏体替换宏调用并用实际参数替换形式参数。
2.编译阶段 - 这有几个较小的阶段,例如:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等。编译阶段可能会/可能不会生成汇编代码。 这两种方法都有各自的优点和缺点。 我们将假定汇编代码是在这个讨论中产生的。
3.汇编阶段 - 汇编器将编译器的输出转换为目标代码。 汇编可以是一次通过或两次通过。
4.链接阶段 - 已生成的代码有许多引用和调用在其他模块中定义的子例程。 这些模块在这个阶段被链接到代码,并且地址被分配给这些外部引用的指令。
5.加载阶段 - 在这个阶段,前一阶段产生的所有段被加载到RAM中用于实际执行,控制权被传递到第一条指令。
在这个答案中列出的所有组件都有许多错综复杂的细节和子部分,决不是语言处理器的完整解释。
有些书籍如作者DM Dhamdere,Tannenbaum和Alfred Aho在这些主题上很有用。
链接地址: http://www.djcxy.com/p/73305.html上一篇: Compiling process in terms of a simple c++ program
下一篇: How is the header file connected to the corresponding .cpp file?