我正在编写类似编译器的东西。问题如下:我有一个代码,由一系列分配组成:
t1=a+b+c
t2=t1*d
t3=sqrt(t1+t2)
t4=t2+5
...
大多数“t”变量都是临时的。我想减少临时变量的数量,尽可能多地重复使用它们。所以,我需要重新排列代码,对表达式进行分组,让一些变量接近变量赋值,所以在计算这些表达式之后,变量可以被重用。当然,我想在此过程中保留代码逻辑。执行此操作的最佳算法是什么?
我正在编写类似编译器的东西。问题如下:我有一个代码,由一系列分配组成:
t1=a+b+c
t2=t1*d
t3=sqrt(t1+t2)
t4=t2+5
...
大多数“t”变量都是临时的。我想减少临时变量的数量,尽可能多地重复使用它们。所以,我需要重新排列代码,对表达式进行分组,让一些变量接近变量赋值,所以在计算这些表达式之后,变量可以被重用。当然,我想在此过程中保留代码逻辑。执行此操作的最佳算法是什么?
您将查看变量的生命周期。当不再使用该变量时,您可以将其丢弃并重新使用其内存空间。例如:
t1=a+b+c
t2=t1*d
t3=sqrt(t1+t2)
// t1 is no longer used, free space to use for t4
t4=t2+5
// t2 is no longer used
...assuming only t3 and t4 is used later on
您还可以查看生命周期如此短以至于甚至不需要分配的变量,例如:
t1 = a+b+c
t2 = t1 * 2
这里t1
只使用一次,在下一个语句中,所以你可以取上一个计算的结果并使用它:
t2 = (a+b+c) * 2