0

我正在编写类似编译器的东西。问题如下:我有一个代码,由一系列分配组成:

    t1=a+b+c
    t2=t1*d
    t3=sqrt(t1+t2)
    t4=t2+5
    ...

大多数“t”变量都是临时的。我想减少临时变量的数量,尽可能多地重复使用它们。所以,我需要重新排列代码,对表达式进行分组,让一些变量接近变量赋值,所以在计算这些表达式之后,变量可以被重用。当然,我想在此过程中保留代码逻辑。执行此操作的最佳算法是什么?

4

1 回答 1

0

您将查看变量的生命周期。当不再使用该变量时,您可以将其丢弃并重新使用其内存空间。例如:

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
于 2012-10-06T11:33:25.253 回答