我在网上解决了一个简单的编码挑战。我已经用C,C ++和C#编写了相同问题的代码。解决问题后,网站会提供有关正确性和性能的统计信息。这是什么东西让我震惊。 c#代码用了0.06秒来执行并给出了结果,其中C花了0.006秒而c ++花了0.009秒。
我的问题是,为什么c#代码运行速度慢10倍?或者说事实上c / c ++的运行速度要快10倍?
链接到以下网站。
我假设所有三个代码块都有相同的测试用例。
答案 0 :(得分:3)
C#编译为通用中间语言。然后运行Just In Time(JIT)。本质上,代码是在需要时编译的。 C和C ++编译成计算机本机汇编语言。这意味着在运行时不需要进行任何其他操作。虽然这是一个广泛的概述,但我会恳请您研究JIT和CIL,因为这将帮助您更深入地理解。你可以在这里查看它们: Common Intermediate Language, Just In Time
答案 1 :(得分:0)
没有严格的理由说明具有JIT的基于字节码的语言(如C#或Java)不能像C ++代码一样快。但是,C ++代码在很长一段时间内都显着提高了速度,而且在很多情况下今天仍然如此。这主要是因为更高级的JIT优化实现起来很复杂,而真正酷的JIT优化只是刚刚到来。
因此,在许多情况下,C ++更快。但这只是答案的一部分。 C ++实际上更快的情况是高度优化的程序,专家程序员彻底优化了代码的地狱。这不仅非常耗时(因此也很昂贵),而且还会因过度优化而导致错误。
请记住,像你这样的快速测试并不意味着什么。 c ++ / c在很多很多情况下都会有几乎相同的运行时间,除了你可能遇到的几乎所有情况。