ПРИЛОЖЕНИЕ 6 Автоматическая оптимизация программ
Компилятор Турбо Паскаля автоматически производит оптимизацию выполняемого кода по нескольким критериям:
1. Вычисление выражений, состоящих из констант числовых и символьных типов (в том числе значений функций Abs, Sqr, Succ, Pred, Odd, Lo, Hi, Swap и Ptr от констант) или из конкатенации строк, происходит на этапе компиляции. То есть присваивания A:=10+Sqr(5) и S:='a'+'b' эквивалентны по эффективности кода присваиваниям А:=35 и S:='ab'. Это верно и для выражений в вызовах процедур и функций, а также для вычисления индексов массивов.
2. Одинаковые строковые константы хранятся в ЕХЕ-файле в единственном экземпляре. Например, два или более оператора Write ('Stop—') в одной и той же части программы будут использовать одну и ту же копию строковой константы 'Stop—'.
3. По умолчанию логические выражения вычисляются по короткой схеме (в режиме SB-). Это дает минимальный и быстрый код (см. разд. 9.3).
4. Порядок вычислений выражений в случае равных приоритетов операций выбирается компилятором оптимальным (кроме логических выражений, вычисляемых слева направо).
5. По умолчанию режим проверки корректности диапазонов значений отключен (режим $R-), что уменьшает код и увеличивает быстродействие.
6. Где только возможно, компилятор заменяет целочисленное умножение на степени числа 2 операцией сдвига влево (shl).
7. По умолчанию производится оптимизация размещения данных в памяти, что задается режимом компиляции $А+.
8. В выполняемый файл не будут включены ветви программы, которые заведомо невыполнимы. Например, строка
if False then Оператор;
будет проигнорирована.
На этапе компоновки программы из ЕХЕ-файла будут автоматически удалены те процедуры, функции и разделы объявления переменных, к которым не происходит обращения в тексте программы. В частности, из этого следует, что объем ЕХЕ-файла определяется не как сумма размеров используемых им библиотек (модулей), а как сумма размеров кодов реально работающих подпрограмм и данных.
Оптимизация при компоновке включается только при компиляции программы на диск.
- 556 -