为什么人们说C语言更高效?

5
人们常说C语言比其他高级语言更有效率。我不明白为什么。我知道汇编语言是高效的,因为它与机器语言有密切关系。
但是,C、C++或Ruby等语言也会被“翻译”成机器语言,对吧?所谓更有效率,是指机器码更好,还是意味着将代码“翻译”成机器码需要更少的时间?如果有某个编译器或解释器能够生成更快、更好的机器码,那又怎么样呢?
2个回答

5
我知道汇编语言很高效,因为它与机器语言密切相关。
不,它是一种1.1关系——它是精确的机器代码命令的书面表示。它是一种助记符语言,基本上用另一种表示方法代替了字节码。所有高级语言都没有这个特点。
但是C和C++、Ruby之类的语言,它们最终也会被“翻译”成机器语言,对吗?
是的,但问题在于何时以及如何高效。低级语言(例如C)允许使用较少高级构造,因此更接近汇编语言,并且更容易让编译器进行优化。
所谓更高效,是指机器代码更好,还是说翻译成机器代码需要更少时间?
除了即时编译的语言或解释器外,没有人关心翻译需要多长时间。C是静态翻译的,只需一次,然后执行。
如果有某个编译器或解释器可以生成更快、更好的机器代码怎么办?
那么这个说法就不正确了。有趣的是,事实并非如此——对于高级语言来说,要制作出超级高效的编译器并不容易。基本上你一直在问为什么超级跑车速度这么快,然后说当每辆菲亚特熊猫都有更多马力时,超级跑车就不会被认为速度那么快了——但可悲的是,他们没有也永远不会有。

1
你的回答简明清晰,非常感谢! - Gnijuohz
2
翻译时间的一个小细节:编译器性能确实很重要,没有人想等待一个小时来进行调试构建。例如,几乎没有编译器会尝试在寄存器分配(通过图形着色)时找到最优解,它们都使用启发式和更快的算法,有时会导致更差的代码,但指数级别更有效率(图形着色是NP完全问题)。除了优化之外,一半以上的解析算法都是出于性能考虑。 - user395760
真的吗?我不在意。你可以为发布的夜间构建关闭它。有些系统很大,有单元测试等。 - TomTom

4
这里涉及到许多不同的问题,因此完整的答案会非常长。
一些高级语言比其他语言更高级。C并不是非常高级的语言。
不同的语言做出不同的权衡。有些语言专注于开发的便捷性、程序员的生产力、防止常见错误、自动化等方面。
其他语言则注重速度/效率。C是后者之一,部分原因是由于其年龄和历史。
在相同的努力下,C程序不一定比其他语言的等效程序更快,特别是在现代多核系统上。然而,如果您有时间编写它们,C会暴露更多低级优化的可能性。缺点是这些优化容易出错,通常会完全崩溃您的程序。

1
谢谢,这真的让我更清楚了! - Gnijuohz
1
一些高级语言比其他语言更高级。C语言并不是非常高级 - 同意,它只是足够高级 ;) - user529758

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接