ВУЗ:
Составители:
51
Оптимизация программы – это обработка, связанная с переупорядочива-
нием и изменением операций в компилируемой программе с целью получения
более эффективной результирующей объектной программы. Оптимизация вы-
полняется на этапах подготовки к генерации и непосредственно при генерации
объектного кода.
Лучшие оптимизирующие компиляторы могут получать объектные про-
граммы из сложных исходных программ, написанных на языках высокого
уровня, почти не уступающие по качеству программам на языке ассемблера.
Временные и трудовые затраты на создание такой программы существенно
меньше, чем при ее реализации на ассемблере. У современных компиляторов
существуют возможности выбора тех или иных критериев оптимизации, исходя
из которых оценивается эффективность объектной программы. Так, с одной
стороны, возможна оптимизация с минимизацией размера программы, с другой
стороны – оптимизация с увеличением скорости ее выполнения. При этом не
требуется изменять текст программы на исходном языке.
Все эти преимущества говорят в пользу применения оптимизации. Единст-
венным, но существенным недостатком оптимизации является необходимость
тщательной ее проработки при создании компилятора. Используемые методы
оптимизации ни при каких условиях не должны приводить к изменению
«смысла» исходной программы (т.е. к таким ситуациям, когда результат вы-
полнения программы изменяется после ее оптимизации). К сожалению, не все
методы оптимизации, используемые создателями компиляторов, могут быть
теоретически обоснованы и доказаны для всех возможных видов исходных
программ. Поэтому большинство компиляторов предусматривает возможность
отключать те или иные из возможных методов оптимизации. (Часто при опти-
мизации компиляторы выдают предупреждения разработчику программы, если
тот или иной ее участок вызывает подозрения в отношении правильности его
«смысла»). Применение оптимизации также нецелесообразно в процессе отлад-
ки исходной программы.
Различаются две основные категории оптимизирующих преобразований:
• преобразования исходной программы (в форме ее внутреннего пред-
ставления в компиляторе), не зависящие от результирующего объектно-
го языка;
• преобразования результирующей объектной программы.
Второй тип преобразований может зависеть не только от свойств объект-
ного языка, но и от архитектуры вычислительной системы, на которой будет
выполняться результирующая программа. Так, например, при оптимизации
может учитываться объем кэш-памяти и методы организации конвейерных
операций центрального процессора. Этот тип преобразований мы рассматри-
вать не будем, именно эти преобразования могут повлиять на «смысл» исход-
ной программы. В большинстве случаев они являются изобретениями произво-
дителей компиляторов и строго ориентированы на определенные архитектуры
вычислительных машин.
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »