17.10. Оптимизация программы
Во многих случаях при использовании языка Паскаль нельзя определенно сказать, какой из ряда возможных вариантов будет лучшим по сравнению с другими вариантами. Однако можно дать некоторые общие рекомендации, соблюдение которых может дать определенный эффект. Эти рекомендации вытекают также из принципов работы оптимизирующего компилятора.
Целесообразно на разных этапах создания и эксплуатации программы использовать различные наборы ключей компилятора (см. п. 17.7.1).
Использование константных выражений в программе не увеличивает размер исполняемого файла и время выполнения программы, т. к. их значения вычисляются на этапе компиляции.
При использовании несколько раз одной и той же константы-строки создается только одна копия этой строки, что экономит память.
Целесообразно, особенно в случае структурированных параметров, использовать в подпрограммах параметры-константы вместо параметров-значений, т. к. в этом случае в стеке не создаются копии исходных параметров, что экономит память и увеличивает быстродействие.
Использование оператора над записями with обычно уменьшает размер исполняемого файла и увеличивает быстродействие программы.
Целесообразно при использовании параметров порядкового типа вместо операций многократного сравнения с граничными значениями использовать операцию in, если диапазон изменения параметра допускает использование множеств. Например, вместо выражения (X >= 'A') and (X <= 'Z') лучше написать: Xin ['A'..'Z'].
Всюду, где можно, следует использовать короткие - в пределах от 0 до 7 (либо от 0 до 15) - множества, т. к. работа с ними осуществляется очень быстро.
Следует учитывать, что при вычислении значений выражений в Turbo Pascal действия одного уровня приоритета не всегда выполяются слева направо (см. п. 4.6), и, если все-таки такая последовательность необходима, нужно выражение разбить на части в соответствии с требуемым порядком выполнения действий.
Не используемые программой подпрограммы, переменные и типизированные константы не увеличивают ее размер, т. к. не включаются в исполняемый файл.
Целесообразно всюду, где только можно, использовать "ближнюю" (near) адресацию подпрограмм, т. к. это экономит память и увеличивает быстродействие.
Для увеличения программы (правда, в ущерб ее размеру) целесообразно параметры располагать, начиная с четных адресов, используя директиву компилятора {$А+}.
Укороченные логические вычисления, как правило, увеличивают быстродействие программы.
При умножении и делении целых чисел на число, являющееся целой степенью числа 2 (2, 4, 8 и т.д.), вместо операций умножения и деления следует использовать операции shr и shl.
Те части программы, которые используются довольно часто (отдельные подпрограммы, циклы, выполняющиеся большое число раз и т.д.) целесообразно писать на языке ассемблера.
|