大多数编译器带有可选的优化标志,编译器优化可以权衡编译后的代码大小和执行速度。为了提高速度,编译器通常执行以下操作。
- 将变量存储在寄存器中:编译器会将常用的变量和子表达式存储在寄存器中,编译器还将自动为这些变量分配寄存器。
- 采用循环优化:编译器可以自动执行各种循环优化,包括完整或部分循环展开,循环分段等。循环优化可以显著提高视频应用的性能。
- 忽略调用堆栈上的帧指针:通常,帧指针(frame pointers)在调用堆栈上不是严格必需的,可以安全地省略。一般而言,忽略调用堆栈上的帧指针可以或多或少的提高程序的性能。
- 改善浮点数的一致性:例如,可以通过禁用可能改变浮点数精度的优化来提高一致性。这是不同类型的性能优化之间的权衡。
- 减少函数调用的开销:例如,可以将某些函数调用替换为编译器的固有函数来实现。
- 权衡寄存器空间的节省与内存事务:实现这种折衷的一种方法是在每次函数调用之后从内存中重新加载指针变量。这是在不同类型的性能优化之间进行选择的另一个示例。