我已阅读this,说
例如,主要用C编写的程序通常包含汇编语言中用于优化处理器效率的部分。
我从未见过主要用C编写的程序,其中包含汇编代码,至少不直接作为源代码。只是,他们与Linux内核的例子。
这句话是否属实?若然,怎么可能优化处理器效率呢?
编译器不是将C代码翻译成汇编代码吗?
答案 0 :(得分:2)
不,这不是真的。我估计不到1%的C程序员甚至知道如何编写程序集,并且使用它的需求非常少见。它通常仅用于非常特殊的应用程序,例如OS内核的某些部分或编程嵌入式系统,因为它们需要执行没有相应C代码的机器操作(例如直接操作CPU寄存器)。在早些时候,一些程序员会将它用于性能关键的代码段,但编译器优化已经显着改进,并且CPU变得更快,因此现在很少需要它。它可能仍然在内置库中使用,因此像strcpy()
这样的函数将尽可能快。但是,应用程序员几乎不必诉诸于汇编。
答案 1 :(得分:1)
编译器是不是只将C代码翻译成汇编代码?
是的,但是......
在某些情况下,您可能希望访问特定的寄存器或其他特定于平台的位置,而标准C并未提供良好的方法。如果要查看状态字或直接加载/读取数据寄存器 ,则通常需要下拉到汇编程序级别。
此外,即使在这个非常聪明的优化编译器时代,人工装配程序员仍然可以编写汇编代码,这些代码将超出编译器生成的代码。如果您需要从代码中抽出每个可能的循环,您可能需要“手动”执行几个例程。