我正在写类似编译器的东西。问题如下:我有一个代码,由一系列赋值组成:
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