Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
55
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Глава 23. Автоматическая оптимизация

В Borland Pascal выполняется несколько различных типов опти-

мизации кода, начиная от свертывания констант и вычисления бу-

левских выражений по короткой схеме и кончая эффективной компо-

новкой. Рассмотрим некоторые виды оптимизации.

Свертывание констант

Если участвующие в операции операнды представляют собой

константы перечислимого типа, то в Borland такое выражение вычис-

ляется во время компиляции. Например, выражение:

Х := 3 + 4 * 2

приведет к генерации такого же кода, как выражение Х := 11, а вы-

ражение:

S := 'In' + 'Out'

генерирует тот же код, что S := 'InOut'.

Аналогично, если операнды функций Abs, Sqr, Succ, Pred, Odd,

Lo, Hi и Swap представляют собой константы перечислимого типа, то

функция вычисляется во время компиляции.

Если индексом массива является константа или выражение, сос-

тоящее из констант, то адрес элемента вычисляется во время компи-

ляции. Например, доступ к элементу Dаtа[5,5] так же эффективен,

как доступ к простой переменной.

Слияние констант

Использование одной и той же строковой константы два или бо-

лее раз приводит к генерации только одной копии константы. Напри-

мер, два или более оператора Write('Dоnе') в одной и той же части

программы приведет к ссылке на одну и ту же копию строковой конс-

танты 'Donе'.

Вычисление по короткой схеме

В Borland Pascal реализуется вычисление булевского выражения

по короткой схеме. Это означает, что вычисление булевского выра-

жения прекращается, как только результат всего булевского выраже-

ния становится очевидным. При этом обеспечивается минимальное

время выполнения и, обычно, минимальный размер объектного кода.

Вычисление по короткой схеме делает также возможным вычисление

конструкций, которые иначе были бы недопустимыми. Например:

while (I<=Length(S)) and (S[I]<>' ') do

Inc(I);

while (P<>nil) and (P^.Value<>5) do

P:=P^.Next;

В обоих случаях, если первая проверка имеет значение Falsе,

вторая проверка не вычисляется.

Противоположным вычислению по короткой схеме является полное

вычисление, которое можно выбрать с помощью директивы компилятора

{$В+}. В этом случае обеспечивается вычисление каждого операнда

булевского выражения.

Параметры-константы

Там, где это возможно, вместо параметров-значений следует

использовать параметры-константы. Параметры-константы настолько

же эффективны, что и параметры-переменные, а во многих случаях

превосходит их по эффективности. В частности, параметры-константы

генерируют получение кода меньшего размера и программы с ними вы-

полняются быстрее, чем программы с параметрами-значениями струк-

турного и строкового типов.

Параметры-константы более эффективны, чем параметры-значе-

ния, поскольку компилятору не приходится генерировать копии фак-

тических параметров на входе в процедуры и функции. Значения па-

раметров должны быть скопированы в локальные переменные, так что

модификации формальных параметров не приведут к модификации фак-

тических параметров. Поскольку формальные параметры-константы мо-

дифицироваться не могут, компилятору нет необходимости копировать

фактические параметры, что экономит код и пространство в стеке.

Соседние файлы в предмете Программирование на Pascal