【问题标题】:Why does C# compile much faster than C++? [duplicate]为什么 C# 的编译速度比 C++ 快得多? [复制]
【发布时间】:2010-10-10 16:21:07
【问题描述】:

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

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

注意 2:在有人说这与编程无关之前,我正在实现一个解析器,我正在寻找从一开始就可以做些什么来提高编译速度。

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

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

【问题讨论】:

  • 我想知道您是否已经阅读了您之前关于此主题的问题的答案:stackoverflow.com/questions/588884/…
  • 是的,我有。本题关注的是c到C#的具体区别
  • 在那个答案中特别提到了那些......正是 C++ 所做的事情有所不同,c# 没有什么特别的
  • 你的外卖点是正确的。我要补充一点,C++ 语法是上下文相关的,解析器必须与语义分析一起运行(这只会让一切变得更加复杂)。

标签: c# c++ compiler-construction


【解决方案1】:

有两个不同的问题需要考虑 - 处理阶段的数量和定位的复杂性。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 尽管如此,这个问题还有很多。
    • Delphi 也能编译成机器码,而且比 C# 快,C# 没有。
    • 主要问题是来源,而不是目标。
    【解决方案3】:

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

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

    因此,如果您出于编写解析器的目的比较它们...请了解您不应该拥有 .h 样式的包含文件 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多