个性化阅读
专注于IT技术分析

与机器无关的优化

  • 机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对内存位置或任何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;
}
赞(0)
未经允许不得转载:srcmini » 与机器无关的优化

评论 抢沙发

评论前必须登录!