内联汇编
内联汇编是在 C 源代码中添加汇编指令的做法。没有 ISO C 标准要求支持内联汇编。由于它不是必需的,因此内联汇编的语法因编译器而异。尽管通常支持它,但使用内联汇编的原因很少,而且很多理由都没有。
优点
- 性能通过编写操作的特定汇编指令,你可以获得比编译器生成的汇编代码更好的性能。请注意,这些性能提升很少见。在大多数情况下,只需重新安排 C 代码就可以获得更好的性能提升,这样优化器就可以完成它的工作。
- 硬件接口设备驱动程序或处理器启动代码可能需要一些汇编代码才能访问正确的寄存器,并保证某些操作按特定顺序发生,并且操作之间有特定的延迟。
缺点
- 编译器可移植性从一个编译器到另一个编译器,内联汇编的语法不保证是相同的。如果你正在编写应该由不同编译器支持的内联汇编代码,请使用预处理器宏(
#ifdef
)来检查正在使用的编译器。然后,为每个受支持的编译器编写单独的内联汇编部分。 - 处理器可移植性你无法为 x86 处理器编写内联汇编,并期望它可以在 ARM 处理器上运行。内联汇编旨在为特定处理器或处理器系列编写。如果你希望在不同的处理器上支持内联汇编,请使用预处理器宏来检查编译代码的处理器,并选择相应的汇编代码部分。
- 未来的性能变化可以根据某个处理器时钟速度编写预期延迟的内联汇编。如果为具有更快时钟的处理器编译程序,则汇编代码可能无法按预期执行。