我正在编写类似于编译器的东西。问题是:我有一个代码,由一系列赋值组成:
t1=a+b+c
t2=t1*d
t3=sqrt(t1+t2)
t4=t2+5
...
大多数“t”变量都是暂时的。我想减少临时变量的数量,尽可能多地重复使用它们。因此,我需要重新排列代码,对表达式进行分组,使变量赋值变量接近变量,因此在计算这些表达式后,可以重用变量。当然,我想在此过程中保留代码逻辑。 哪个是最好的算法呢?
答案 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