为什么C#的编译速度比C ++快得多?

时间:2009-03-01 22:09:24

标签: c# c++ compiler-construction

我注意到在同一台机器上,C#的编译时间远远少于C ++。为什么?

注1:我没有做过任何科学基准。

注意2:在任何人说这与编程无关之前,我正在实现一个解析器,我发现我可以从开始提高编译速度。

注3:我有一个类似的问题Why do compilations take so long?。这个问题询问了从C / C ++到C#的具体差异。很明显,一种简单的语言编译比复杂的语言更快,但C和C#都是复杂的语言。

我的内容:1)C / C ++从预处理器和头文件中缓慢运行。 2)很多标头会导致更多的数据被解析。特别是当每个文件都可以使用预处理器时可以更改代码3)C#推迟一些编译到程序启动4)IL指令很简单,机器不是

4 个答案:

答案 0 :(得分:13)

看一下这篇文章:Why does C++ compilation take so long?

答案 1 :(得分:6)

需要考虑两个独立的问题 - 处理阶段的数量以及定位的复杂性。

典型的C ++编译涉及许多阶段(尽管这些阶段可能同时运行),其中预处理器处理指令和宏,然后C ++编译器本身处理生成的代码。预处理器生成明显更大的输出,所有需要由实际编译器解析和处理的代码都很常见。

另外,请记住,C ++编译器将针对x86或x64机器语言 - 预先处理所有优化,并尝试充分利用在OO样式开发时未真正优化的硬件。

相比之下,C#编译器的目标是Microsoft中间语言(MSIL),这是一种更高级别的机器代码平台,旨在用于OO开发。 C#提供的许多构造都直接映射到IL指令,使编译变得非常简单。优化和其他活动的公平推迟推迟到实际程序启动,此时它针对确切的可用机器进行了优化。

答案 2 :(得分:2)

因为C ++编译为机器代码,而C#编译为字节代码。您第一次启动.NET程序时是否注意到 lag 。当字节代码被JITed(编译为机器代码)时。

答案 3 :(得分:0)

我认为这可能是因为解析它必须做的AMOUNT,而不是解析器本身的速度。

C ++通常使用C预处理器,它会引入大量的包含文件(正如其他人所建议的那样,另一个问题包含许多类似的答案)。这会耗尽要解析的代码量。

因此,如果您为了编写解析器而对它们进行比较...了解您不应该使用.h-style包含文件:)