logo search
информ

27)Некоторые приемы оптимизации программ

Оптимизацией называется такое преобразование исходного текста программы, при котором результат ее выполнения остается неизменным, но улучшаются некоторые характеристики. Эти характеристики зависят от выбранных критериев оптимизации. Основными критериями оптимизации являются: либо время выполнения программы, либо затраты оперативной памяти, размер исходного кода.

1.Оптимизация, не зависящая от компилятора. Современные компиляторы, то есть программы, создающие на основе исходного теста программы исполняемый код, как правило, выполняют и оптимизацию этого кода, размещая инструкции процессору таким образом, чтобы увеличить скорость выполнения программы. Вмешательство программиста в этот процесс не требуется. Следует иметь в виду, что оптимизация компилятором выполняется достаточно осторожно и возможности такой автоматической оптимизации ограниченны. Перечислим некоторые приемы, которые может использовать программист при написании исходного текста программы.

2.Инициализация объектов данных. Во многих программах какую-то часть объектов данных необходимо инициализировать, то есть присваивать им начальные значения. Такое присваивание выполняется либо в самом начале программы, либо, например, в начале цикла. Правильная инициализация объектов данных позволяет сэкономить драгоценное процессорное время. Так, например, если речь идет об инициализации массивов, использование цикла, скорее всего, будет менее эффективным, чем объявление этого массива типизированной константой.

3.Программирование арифметических операций. В том случае, когда значительная часть времени работы программы отводится арифметическим вычислениям, немалые резервы повышения скорости работы программы тратятся в правильном программировании арифметических (и логических) выражений. Важно понимать, что различные арифметические операции значительно различаются по быстродействию. Самыми быстрыми являются операции сложения и вычитания. Более медленным является умножение, затем идет деление. Относительно много времени тратится на обращение к подпрограммам. Быстродействие также зависит от типа операндов. Программируя арифметические выражения, следует выбирать такую форму их записи, чтобы количество медленных операций было сведено к минимуму.

4.Циклы Различается и время выполнения циклов. Время выполнения цикла со счетчиком и цикла постусловием при всех прочих равных условиях совпадает, цикл с предусловием выполняется несколько дольше (примерно на 20-30%).При использовании вложенных циклов следует иметь в виду, что затраты процессорного времени на выполнение такой конструкции могут зависеть от порядка следования вложенных циклов.

5. Инвариантные фрагменты кода.Эта тема тесно связана с проблемой оптимального программирования циклов. Внутри цикла могут встречаться выражения, фрагменты которых никак не зависят от управляющей переменной цикла. Их называют инвариантными фрагментами кода. Современные компиляторы часто определяют наличие таких фрагментов и выполняют автоматическую оптимизацию. Такое возможно не всегда, и иногда производительность программы зависит целиком от того, как запрограммирован цикл