Автоматическая оптимизация программ




Компилятор Турбо Паскаля автоматически производит оптимизацию выполняемого кода по нескольким критериям:

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 Оператор;

будет проигнорирована.

На этапе компоновки программы из ЕХЕ-файла будут автоматически удалены те процедуры, функции и разделы объявления переменных, к которым не происходит обращения в тексте программы. В частности, из этого следует, что объем ЕХЕ-файла определяется не как сумма размеров используемых им библиотек (модулей), а как сумма размеров кодов реально работающих подпрограмм и данных.

Оптимизация при компоновке включается только при компиляции программы на диск. {555}

ПРИЛОЖЕНИЕ 7

Список демонстрационных процедур и функций

Глава 6. Управляющие структуры языка

PROGRAM (рис.6.16)

Демонстрация суммирования элементов массивов любого типа

Fact, IntPower (разд. 6.9.6.4)

Примеры рекурсивного вычисления факториала и целой степени числа

UNIT Colors (рис. 6.19)

Модуль, вводящий цветовые константы

Глава 8. Обработка символов и строк

ExplodeString (рис. 8.4)

Процедура вывода строки с эффектом раздвижения и звуковым сигналом

CenterStr (рис. 8.5)

Функция создания строки заданной длины со вставленной в середину подстрокой

ZStr (рис. 8.6)

Процедура преобразования числа в строку так, что предшествующие числу пробелы заменяются на нули

PosN (рис. 8.7)

Функция, возвращающая номер символа, с которого начинается N-e вхождение подстроки в строку

Глава 9. Математические возможности Турбо Паскаля

Binary (рис. 9.1)

Функция перевода целого числа в двоичное представление

Code2to1/DeCode1to2 (рис. 9.2)

Процедуры кодирования/декодирования двух малых чисел в один байт

ATAN2 (рис. 9.3)

Функция, возвращающая значение угла наклона отрезка к оси X в

радианах. Возвращаемое значение находится в диапазоне 0...2*Pi и

учитывает знаки координат

ArcCos, ArcSin (рис. 9.4)

Функции, возвращающие главные значения арккосинуса и арксинуса

Log10 (рис. 9.5)

Функция, возвращающая значение десятичного логарифма

Pwr (рис. 9.6)

Функция, возвращающая значение A в степени X (A>0)

Gauss (рис. 9.7)

Функция, возвращающая случайное вещественное значение, распределенное по нормальному закону {556}

Глава 11. Ссылки, динамические переменные и структуры

HeapAvail (рис. 11.7)

Функция, возвращающая размер свободной области кучи, которая расположена выше значения HeapPtr

UNIT StackManager (рис. 11.10)

Модуль, реализующий набор процедур для работы со стеком произвольных данных

Глава 12. Ввод, вывод данных и файловая система

FileExists (рис. 12.11)

Функция проверки существования файла с данным именем

ReadInteger (рис. 12.14)

Процедура ввода с клавиатуры значения типа Integer с игнорированием любого ввода, не соответствующего этому типу

Глава 13. Объектно-ориентированное программирование

PROGRAM (рис. 13.8)

Каркас программы, реализующей полиморфные операции с динамически распределяемыми объектами с полной обработкой ошибок

Глава 14. Специальные средства языка

Devices (рис. 14.3)

Программа — демонстрация анализа конфигурации ПЭВМ

FillWord (рис. 14.4)

Процедура заполнения блоков памяти значением типа Word (по аналогии с FillChar)

NewExit (рис. 14.7)

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

Глава 15. Модуль CRT

IsBlinking, GetBackGround, GetForeGround (рис. 15.5)

Функции проверки факта мерцания символов на экране, текущего цвета фона и символов

VertStr (рис. 15.9)

Процедура вертикального вывода строки

Spiral (рис. 15.10)

Процедура закраски по спирали области экрана

PROGRAM (рис. 15.11)

Демонстрация работы процедуры ClrEOL

PROGRAM (рис. 15.12, 15.13)

Демонстрация работы процедур InsLine/DelLine

PROGRAM (рис. 15.14)

Демонстрация работы процедур HighVideo, LowVideo {557}

SoundType (рис. 15.15)

Процедура звуковой печати строк

Phone, Bell, Sirena (рис. 15.16)

Процедуры имитации звуков телефонного звонка, зуммера и сирены

Глава 16. Модуль DOS

XDOSVersion (рис. 16.1)

Функция выдачи строки с номером версии MS-DOS

ShowSET (рис. 16.2)

Процедура вывода значений системных переменных MS-DOS

WhatDay (рис. 16.3)

Функция, возвращающая название дня недели по дате

PROGRAM (рис. 16.4)

Пример программы, анализирующей время своей работы

ChangeFTime (рис. 16.5)

Процедура смены даты и времени создания файла

PROGRAM (рис. 16.6)

Пример программы, анализирующей жесткие диски ПЭВМ

GetVolume (рис. 16.7)

Функция, возвращающая метку заданного диска

FileExists (рис. 16.8)

Функция проверки существования файла

ShowDisk (рис. 16.9)

Процедура вывода каталога по заданному шаблону

PrintScreen (рис. 16.13)

Печать экрана на принтере, как при нажатии комбинации клавиш Shift+PrtScr

TestDrives (рис. 16.14)

Процедура определения множества имен дисков в ПЭВМ

Execute (рис. 16.17)

Функция запускает файл с параметрами и возвращает логическое значение True, если запуск был удачен.

HideScr (рис. 16.18)

Резидентная программа скрытия экрана. Работает во всех текстовых режимах и использует пароль (если задан) для возврата.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: