在与朋友的一次争论中,我说过用C语言之外的任何语言编写一个比C语言中所有变体更快的程序,都是不可能做同样的事情。我的论点是基于对以下问题的肯定回答。这是真的吗?
警告:当然,您可以在C程序中包含程序集,但假装不可能(提出一个更有趣的问题!)。
答案 0 :(得分:6)
问题的答案如果我们想到"编译"作为从[C程序]到[汇编程序]的地图,那么这个地图是否具有主观性?显然是 NO 。
可以通过以下方式证明:
*可能存在编译器不会生成的汇编语言指令,例如int 10
,halt
,jmp *eax
,iret
,sub esp,esp
...
*您可能正在摆弄C编译器从未触及的汇编中的寄存器,例如段寄存器。
C语言无法表达的装配创造世界。
关于另一个问题,我不确定你的意思
用C语言之外的任何语言编写比C中所有变体更快的程序都是不可能做同样的事情。
如果你的意思是一个熟练的程序员总是可以编写一个C程序,在给定的任务上比用任何语言编写的任何其他程序更快,我想你也可能错了,因为编译器本身是一个固定的变量,不完善的。
想象一下,例如C编译器非常愚蠢并生成未经优化的代码。很明显,可以编写一个能够在给定任务中击败最佳C变化的汇编程序:所需要的只是优化未优化的代码。由于C编译器不完善,您总能找到一个任务,即使是最好的C变体也可以进一步优化。