📜  机器无关

📅  最后修改于: 2020-12-06 08:09:30             🧑  作者: Mango

与机器无关的优化

  • 机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对内存位置或任何CPU寄存器。
  • 中间代码生成的过程引入了很多低效率的问题,例如:使用变量而不是常量,额外的变量副本,重复计算表达式。通过代码优化,您可以消除这种效率并改善代码。
  • 它有时可能会改变程序的结构,使其无法识别,例如:展开循环,内联函数,消除程序员定义的某些变量。

代码优化可以通过以下不同方式执行:

(1)编译时间评估:

(a)z = 5 *(45.0 / 5.0)* r
在编译时执行5 *(45.0="" 5.0)*="" p="" r。<="">

(b)x = 5.7
3.6
在编译时将x="" 3.6。<="" 3.6评估为5.7="" p="" y="x">

(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;
}

>


在编译时执行5>