C对装配的报道

时间:2016-01-22 01:15:40

标签: c assembly compilation

在与朋友的一次争论中,我说过用C语言之外的任何语言编写一个比C语言中所有变体更快的程序,都是不可能做同样的事情。我的论点是基于对以下问题的肯定回答。这是真的吗?

  • 如果我们将“编译”视为从[C程序]到[汇编程序]的地图,那么这张地图是否会出现?

警告:当然,您可以在C程序中包含程序集,但假装不可能(提出一个更有趣的问题!)。

1 个答案:

答案 0 :(得分:6)

问题的答案如果我们想到"编译"作为从[C程序]到[汇编程序]的地图,那么这个地图是否具有主观性?显然是 NO

可以通过以下方式证明: *可能存在编译器不会生成的汇编语言指令,例如int 10haltjmp *eaxiretsub esp,esp ... *您可能正在摆弄C编译器从未触及的汇编中的寄存器,例如段寄存器。

C语言无法表达的装配创造世界。

关于另一个问题,我不确定你的意思

  

用C语言之外的任何语言编写比C中所有变体更快的程序都是不可能做同样的事情。

如果你的意思是一个熟练的程序员总是可以编写一个C程序,在给定的任务上比用任何语言编写的任何其他程序更快,我想你也可能错了,因为编译器本身是一个固定的变量,不完善的。

想象一下,例如C编译器非常愚蠢并生成未经优化的代码。很明显,可以编写一个能够在给定任务中击败最佳C变化的汇编程序:所需要的只是优化未优化的代码。由于C编译器不完善,您总能找到一个任务,即使是最好的C变体也可以进一步优化。