编译器函数中的误解

Misconception in Compiler's function

本文关键字:误解 函数 编译器      更新时间:2023-10-16

我研究了许多文章,以了解编译器是否生成对象代码 assembly Code 冲突,即使在堆栈溢出中也是如此。有些人说编译器生成对象代码,而另一些则说 compiler 生成 assembly Code ,然后将其转换为对象代码 by 汇编器。这两个答案都有上投票。是否有任何澄清或理由。

最终,编译器必须以某种方式与将最终在应用程序中最终出现的代码产生对象文件,并且链接器从对象文件和库中结合了代码(这只是对象的集合文件)生成应用程序。因此,可以说编译器生成对象文件,并且链接器将它们结合在一起是正确的。

另一方面,编译器可以通过多种方式生成对象文件。一种方法是直接生成对象文件。另一种方法是生成汇编代码并运行汇编程序以生成对象文件。这引入了一些灵活性,因为编译器不必知道如何布置对象文件的细节;汇编器这样做。另一种方法是生成C代码并运行C编译器(又可以生成汇编代码并在其上运行汇编器)以产生对象文件。这就是Cfront在C 的过去工作。这也是一些现代编译器前端的工作方式。例如,爱迪生设计集团(Edison Design Group)出售C 前端,供应商可以将其连接到自己的后端以进行代码生成。他们还提供了一个生成C代码的版本,在后端尚未正常工作时在编译器开发过程中使用。通常,在这些情况下,编译器将具有一个开关以保持C或汇编器文件,因此您可以检查它以查看正在发生的事情。