C对装配的报道

Dja*_*ems -2 c assembly compilation

在与朋友的一次争论中,我发表这样的评论:用C语言之外的任何语言都不可能用比C中所有变体更快的程序来编写同样的东西.我的论点是基于对以下问题的肯定回答.这是真的吗?

  • 如果我们将"编译"视为从[C程序]到[汇编程序]的映射,那么这个映射是否会出现?

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

chq*_*lie 6

问题的答案如果我们将"编译"视为从[C程序]到[汇编程序]的映射,那么这个映射是否会出现?显然是NO.

它可以平凡被证明:*有可能是汇编语言指令编译器不会产生,如int 10,halt,jmp *eax,iret,sub esp,esp...*您可能会在装配寄存器,C编译器不会接触,如段寄存器来摆弄.

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

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

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

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

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