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

标签 c# c++ compiler-construction

<分区>

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

NOTE1:我没有做过任何科学的benchmark。

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

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

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

最佳答案

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

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

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

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

关于c# - 为什么 C# 的编译速度比 C++ 快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/600639/

相关文章:

c++ - 很难从我的二叉搜索树中删除一个节点

c# - 显式接口(interface)实现不能是虚拟的

c# - 具有嵌套方法的 TransactionScope - MySQL

c# - 如何延迟一件事而不延迟其他所有事情?

c# - 有没有办法在C#、Java等OOP语言中实现原子性?

c# - 如何在 C# 中转换为对象类型?

c++ - 为什么同时具有默认析构函数和 vector 成员会阻止类成为 "nothrow movable constructible"?

c++ - OpenGL 二维矩形未被渲染

visual-c++ - C/C++ 编译器 (Windows)

x86 - 这些年来,英特尔为何改变静态分支预测机制?