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

11 浏览
0 Comments

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

我注意到在同一台机器上,C#编译所需时间比C++少得多。为什么会这样呢?

注1:我没有进行任何科学基准测试。

注2:在任何人说这与编程无关之前,我正在实现一个解析器,我正在寻找一开始可以做的事情来增加编译速度。

注3:我有一个类似的问题为什么编译花费这么长时间?。这个问题是关于C/C++与C#之间的具体差异。显然,简单的语言编译速度会比复杂的语言快,但C和C#都是复杂的语言。

我的结论:1)C/C++由于预处理器和头文件的缘故很慢。2)许多头文件导致需要解析的数据更多,特别是当每个文件都可以使用预处理器来更改代码时。3)C#将一些编译工作推迟到程序启动时。4)IL指令很简单,但机器不是。

0
0 Comments

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

C#编译速度比C++快的原因可能是因为它需要进行的解析工作量较少,而不是解析器本身的速度。

C++通常使用C预处理器,它会引入大量的包含文件(正如其他人所建议的,而且其他问题中也有很多类似的答案)。这样会增加需要解析的代码量。

因此,如果你要比较它们的目的是为了编写解析器...请学习不要使用.h风格的包含文件 🙂

解决方法:

避免使用大量的.h风格的包含文件,可以提高C++的编译速度。

0
0 Comments

C#编译比C++快的原因是因为C++编译成机器码,而C#编译成字节码。当你第一次启动.NET程序时,你可能会注意到有一些延迟,这是因为字节码被即时编译(编译成机器码)的时候才发生。

然而,这个问题不仅仅是这样简单的原因。

Delphi也编译成机器码,而且比C#更快,这表明主要问题在于源代码,而不是目标代码。

解决方法如下:

- 优化源代码,尽量减少不必要的逻辑和重复的计算。

- 使用更高效的算法和数据结构,以提高编译速度。

- 减少对外部库和依赖的使用,以减少编译时的依赖解析和链接时间。

- 使用适当的编译器选项和优化策略,以提高编译速度。

- 并行编译,将编译任务分解为多个并行处理的子任务。

C#编译比C++快是因为C#编译成字节码,而C++编译成机器码。优化源代码和使用适当的编译器选项可以提高编译速度。同时,使用更高效的算法和数据结构、减少对外部库和依赖的使用、并行编译等也可以加快编译过程。

0
0 Comments

C#编译速度比C++快的原因有两个方面需要考虑-处理阶段的数量和目标复杂性。

一般来说,C++的编译包括多个阶段(尽管这些阶段可以并行运行),其中预处理器处理指令和宏,然后C++编译器处理生成的代码。预处理器生成的输出通常比较大,所有这些代码都需要被解析和处理的实际编译器。

此外,需要注意的是C++编译器将会针对x86或x64机器语言进行优化处理,试图在开发时充分利用硬件的优化,而硬件本身并不是为面向对象开发进行优化的。

相比之下,C#编译器的目标是微软中间语言(MSIL),这是一个更高级的类似机器码的平台,专门设计用于面向对象开发。C#提供的许多结构直接映射到IL指令,因此编译非常容易。许多优化和其他活动被推迟到实际程序启动时进行,此时会根据实际可用的机器进行优化。

为了解决C++编译速度慢的问题,可以考虑以下方法:

1. 使用预编译头文件(Precompiled Header):预编译头文件可以缓存一些常用的头文件的编译结果,减少重复编译的时间。

2. 使用增量编译(Incremental Compilation):增量编译只编译发生变化的源文件,而不是重新编译所有文件,可以大大减少编译时间。

3. 优化编译器选项:调整编译器的优化选项,例如关闭一些不必要的优化,以提高编译速度。

4. 使用并行编译(Parallel Compilation):将编译任务分成多个子任务,并行进行编译,可以利用多核处理器的优势,加快编译速度。

总结起来,C#编译速度比C++快的原因在于处理阶段的数量较少,并且目标复杂性较低。要提高C++的编译速度,可以采用预编译头文件、增量编译、优化编译器选项和并行编译等方法。

0