这纯粹是一个理论问题,所以,给出一个“无限”的时间来编写一个琐碎的程序,以及对C和汇编语言的高级知识,用汇编语言做一些事情真的更好吗?在将C编译成汇编语言(机器码)时,“性能”会丢失吗?
说到性能,我的意思是,现代的C编译器在某些直接用汇编语言编程的任务上做得不好吗?
发布于 2010-07-23 07:17:58
在许多情况下,现代C语言可以比汇编做得更好,因为跟踪哪些操作可以重叠,哪些操作会阻塞其他操作是如此复杂,以至于只能由计算机合理地跟踪。
发布于 2010-07-23 07:23:51
与任何东西相比,C并不是低效的。C是一种语言,我们并不从效率的角度来描述语言。我们在效率方面对程序进行比较。C不写程序,程序员写程序。
与C相比,汇编提供了极大的灵活性,这是以时间编程为代价的。如果你是一名guru C程序员和一名guru Assembly程序员,那么很有可能你可以用Assembly来编写任何给定的程序,但这样做的代价几乎肯定是令人望而却步的。
我们中的大多数人都不是这两种语言的大师。对于我们大多数人来说,将性能调优的责任交给C编译器是一件双赢的事情:你得到了许多汇编语言大师的智慧,也就是编写C编译器的人的智慧,以及你手中的大量时间来进一步纠正和增强你的C程序。您还可以获得可移植性作为奖励。
发布于 2010-07-23 07:23:16
这个问题似乎源于一种误解,即更高的性能自然会更好。从更高层次的角度来看,要使汇编在一般情况下变得更好,可以获得太多的东西。即使性能是您最关心的问题,编译器在创建高效汇编方面通常比您自己编写代码做得更好。他们对你所有的源代码有更广泛的“理解”,这是你无法想象的。许多优化都可以通过不使用结构良好的汇编来实现。
显然,也有例外。如果您需要直接访问硬件,包括CPU的特殊处理功能(例如SSE),那么组装是可行的。然而,在这种情况下,你最好使用一个更直接解决一般问题的库(例如数字包)。
但是,只有当您对提高性能有具体的、特定的需求,并且您可以证明您的程序集实际上更快时,才应该担心这样的事情。具体的具体需求包括:注意和测量性能问题,性能是基本设计关注点的嵌入式系统,等等。
https://stackoverflow.com/questions/3314270
复制相似问题