- 机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对内存位置或任何CPU寄存器。
- 中间代码生成的过程引入了很多低效率的问题, 例如:使用变量而不是常量, 额外的变量副本, 重复计算表达式。通过代码优化, 你可以消除这种效率并改善代码。
- 它有时可能会改变程序的结构, 使其无法识别, 例如:展开循环, 内联函数, 消除一些程序员定义的变量。
代码优化可以通过以下不同方式执行:
(1)编译时间评估:
(a)z = 5 *(45.0 / 5.0)* r在编译时执行5 *(45.0 / 5.0)* r。
(b)x = 5.7 y = x / 3.6在编译时将x / 3.6评估为5.7 / 3.6。
(2)变量传播:
在优化之前, 代码为:
c = a * b
x = a
till
d = x * b + 4
优化后的代码是:
c = a * b
x = a
till
d = a * b + 4
在此, 在变量传播之后, a * b和x * b被标识为公共子表达式。
(3)消除死代码:
消除之前的代码是:
c = a * b
x = b
till
d = a * b + 4
消除后的代码是:
c = a * b
till
d = a * b + 4
在此, x = b是无效状态, 因为它将永远不会在程序中使用。因此, 我们可以消除这种状态。
(4)代码运动:
- 它减少了表达的评估频率。
- 它将循环不变的语句带出循环。
do
{
item = 10;
value = value + item;
} while(value<100);
//This code can be further optimized as
item = 10;
do
{
value = value + item;
} while(value<100);
(5)归纳变量和强度降低:
- 强度降低用于以低强度代替高强度操作员。
- 归纳变量在循环中用于以下类型的赋值, 例如i = i +常数。
减少之前的代码是:
i = 1;
while(i<10)
{
y = i * 4;
}
减少后的代码是:
i = 1
t = 4
{
while( t<40)
y = t;
t = t + 4;
}
评论前必须登录!
注册