当编译认为适合于优化目的时,编译器可以更改语句的执行顺序,并且当这些更改不会改变代码的可观察行为时.
一个非常简单的例子 -
int func (int value)
{
int result = value*2;
if (value > 10)
{
return result;
}
else
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
一个天真的编译器可以完全按照所示的顺序为此生成代码.首先计算"结果"并仅在原始值大于10时返回(如果不是,则"结果"将被忽略 - 不必要地计算).
但是,一个理智的编译器会发现只有当"value"大于10时才需要计算"result",因此可以很容易地将计算"value*2"移到第一个大括号内,只有在"value"时才会这样做实际上大于10(不用说,编译器在优化时并不真正看C代码 - 它在较低级别工作).
这只是一个简单的例子.可以创建更复杂的示例.C函数很可能最终看起来几乎没有像编译形式的C表示那样,具有足够激进的优化.