Уменьшить количество временных переменных
Я пишу что-то вроде компилятора. Проблема в следующем: у меня есть код, состоящий из последовательности назначений:
t1=a+b+c
t2=t1*d
t3=sqrt(t1+t2)
t4=t2+5
...
большинство "t"-вариантов являются временными. Я хочу уменьшить количество временных переменных, максимально используя их повторно. Итак, мне нужно переставить код, сгруппировав выражения, имея некоторую переменную, максимально приближенную к присваиванию переменной, чтобы после вычисления этих выражений переменную можно было использовать повторно. Конечно, я хочу сохранить логику кода во время этой процедуры. Какой лучший алгоритм для этого?
1 ответ
Вы бы посмотрели на продолжительность жизни переменных. Когда переменная больше не используется, вы можете отбросить ее и повторно использовать пространство памяти. Например:
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