Уменьшить количество временных переменных

Я пишу что-то вроде компилятора. Проблема в следующем: у меня есть код, состоящий из последовательности назначений:

    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
Другие вопросы по тегам