Реферат: Оптимизация программ

4.4.2. Замена переменных в операторах условного перехода и устранение неиспользуемых определений

В результате сокращения глубины операции рекурсивная программная переменая (определенная через саму себя), являюща­яся управляющей в операторе условного перехода, может быть за­менена в нем генерируемой переменной t(mt- идентификатором).

Это в свою очередь может привести к тому, что рекурсивно опре­деленная программная переменная использоваться в блоке не бу­дет и само определение может быть устранено.

Определение не используется и может быть устранено, если результат определения не является операндом ни одного операто­ра рекурсивного определения и результат этого последнего не используется ни в каком другом операторе.

Существование неиспользуемых определений до оптимизации является ошибкой программиста. Но после оптимизации такие оп­ределения могут возникнуть как результат перестановки и изме­нения отдельных операторов в процессе оптимизации.

Для данного определения в данном блоке производится поиск использования этого определения во всех последующих командах блока и во всех блоках, которые могут следовать за ним.Поиск прекращается, когда находится оператор, использующий данное определение в качестве аргумента. Если такой оператор в данном и последующих блоках найден не будет, то определение считается неиспользуемым и устраняется.

Как только неиспользуемое определение устранено, все опе­раторы, от которых зависел устраненный оператор, если они ниг­де больше не используются, могут быть устранены.

4.4.3 Устранение бесполезных операторов и переменных

Если блок содержит такой оператор S, что переменная, ко­торой присваивается значение в S, не является активной после этого оператора, то S - бесполезный оператор. Иными словами,S

- бесполезный оператор, если он присваивает значение перемен­ной, которая не является выходной и на которую нет ссылки в последующих операторах.

Переменная А называется активной после выполнения опера­тора Si, если

- ей присвоено значение оператором Si;

- ей не присвоены значения операторами Si+1,...Sj;

- на нее ссылается оператор Sj+1.

Если оператор Si присваивает значение переменной А и она неактивна после момента i, то

- при i>0 можно удалить Si из P

- при i=0 можно удалить A из I

Например, пусть B=(P,I,U), где I= A,B,C , U= F,C и P состоит из

F:=A+A

G:=F*C

F:=A+B

G:=A*B

Второй оператор бесполезен, т. к. его область действия пуста. Таким образом, одно применение преобразования устране­ния бесполезных операторов отображает B в B1=(P1,I,U), где P1 состоит из

F:=A+A

F:=A+B

G:=A*B

Теперь в B1 бесполезна входная переменная C и первый опе­ратор. Применив то же преобразование, можно получить B2=(P2,A,B,U), где P2 состоит из

F:=A+B

G:=A*B

4.5. Экономия памяти

К-во Просмотров: 745
Бесплатно скачать Реферат: Оптимизация программ