我注意到,在同一台机器上,C#的编译时间比C++少得多。为什么?
NOTE1:我没有做过任何科学基准测试。
NOTE2:在任何人说这与编程无关之前,我正在实现一个解析器,我正在寻找我可以从get go开始做什么来提高编译速度。
NOTE3:我也有类似的问题,Why do compilations take so long?。这个问题是问从C/C++到C#的具体区别。很明显,简单的语言比复杂的语言编译起来更快,但是C和C#都是复杂的语言。
我的结论是: 1) C/C++在预处理器和头文件方面速度很慢。2)过多的头文件会导致更多的数据需要解析。特别是当每个文件都可以使用预处理器可以更改代码时3) C#将一些编译推迟到程序启动4) IL指令很简单,机器则不是
发布于 2009-03-01 22:43:32
有两个单独的问题需要考虑-处理阶段的数量和目标的复杂性。
典型的C++编译包括许多阶段(尽管这些阶段可以并发运行),在这些阶段中,预处理器处理指令和宏,然后C++编译器本身处理结果代码。对于预处理器来说,生成大得多的输出是很常见的,所有这些代码都需要由实际的编译器来解析和处理。
此外,请记住,C++编译器将以x86或x64机器语言为目标-预先处理所有优化,并尝试最好地利用在OO风格开发中未真正优化的硬件。
相比之下,C#编译器的目标是微软中间语言( Microsoft Intermediate Language,MSIL),这是一种设计用于面向对象开发的类似机器代码的高级平台。C#提供的许多构造直接映射到IL指令中,使得编译变得非常容易。相当一部分优化和其他活动被推迟,直到实际程序启动,在这一点上,它针对确切的可用机器进行了优化。
发布于 2009-03-01 22:12:44
因为C++编译成机器码,而C#编译成字节码。当您第一次启动.NET程序时,您是否注意到了延迟。它是字节码获得JITed (编译为机器码)的时候。
发布于 2009-03-01 22:36:40
我认为这可能是因为它必须进行大量的解析,而不是解析器本身的速度。
C++通常使用C预处理器,它会引入大量的包含文件(正如其他人所建议的,另一个问题包含许多类似的答案)。这增加了要解析的代码量。
因此,如果您为了编写解析器而比较它们...了解您不应该有.h样式的包含文件:)
https://stackoverflow.com/questions/600639
复制相似问题