![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Если не принять специальных мер, в результате трансляции получаются программы,
избыточные и по занимаемой памяти, и по вычислениям. Поэтому меры по оптимизации принимаются в практически используемых трансляторах.
Оптимизация на первых этапах (проходах) трансляции может быть эффективной потому, что программа в этот период компактна, хорошо обозрима, а главное – мобильна.
“Плюсы” оптимизации на последних этапах (проходах) очевидны – именно там аккумулируются результаты неоптимальных решений на всех предыдущих этапах трансляции.
Оптимизация на начальных этапах:
1. Предварительное вычисление выражений.
При данных x:= 2; y:= 3;
оператор z:= x + y + 10
замена на z:= 15;
2. Исключение невыполнимых ветвей. То есть тех ветвей, которые соответствуют невыполнимому сочетанию условий.
3. Выделение общих частей.
|
a:= (x + y) * z - 35;
b:= ((x + y) * z) / a;
4. Вынесение за цикл.
for i:= 1 to 10 do begin
x:= x + i; P(x);
k:= b + c; /* выносится за цикл, т.к. не зависит
от параметра цикла */.
end;
Измененный вариант
k:= b + c;
for i:= 1 to 10 do begin
x:= x + i; P(x);
end;
5. Вычисление логических выражений.
x => y & (z = 5 Ú x ¹ 5)
Так, например, при ложном условии x => y конъюнкция ложна вне зависимости от истинности условия в скобках. А само условие в скобках при истинности z = 5 истинно вне зависимости от выполнения второго скобочного условия.
6. Изменение линейной последовательности команд с целью оптимизации межрегистровых передач, обращений к памяти и т.п.
Дата публикования: 2014-11-03; Прочитано: 276 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!