减少临时变量的数量

时间:2012-10-06 11:26:45

标签: optimization compiler-construction compiler-development

我正在编写类似于编译器的东西。问题是:我有一个代码,由一系列赋值组成:

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

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

1 个答案:

答案 0 :(得分: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