русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ОПТИМИЗАЦИЯ


Дата добавления: 2014-02-04; просмотров: 872; Нарушение авторских прав


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

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

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

Разгрузка участков повторяемости. Является спо­собом оптимизации, который чаще всего подразумевает разгрузку циклов путем вынесения из них выражений, которые могут быть вычислены вне циклов.

К этому виду преобразований относятся также «чистки» тел ре­курсивных процедур, когда выражения в соответствующем цикле (или теле многократно вызываемой процедуры) выносятся и раз­мещаются перед входом в участок повторяемости — это так назы­ваемая чистка вверх.

Иногда применяют чистку вниз, когда соответствующие фраг­менты кода помещаются после цикла. При этом нужно обратить внимание на то, что выносить можно только такие выражения, ко­торые обязательно исполняются при каждом прохождении разгру­жаемого цикла.



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

Например, операция сложения выполняется быстрее операции умножения, а умножение быстрее операции деления. Поэтому один оператор умножения переменной на некоторое небольшое целое число (обычно не более трех) лучше заменить на эквивалентное количество сложений. Выражение:

Total := Summa + Summa + Summa;

эффективнее выражения: Total := 3 * Summa;

а операцию деления Summa := Summa/2; лучше заменить на более быстрое умножение, которое приведет к тому же самому результату Summa := Summa * 0.5;

Чистка программы. Данный способ повышает качество программы за счет удаления из нее ненужных объектов и конст­рукций. Набор преобразований этого типа включает в себя сле­дующие варианты оптимизации:

удаление несущественных операторов, то есть операторов, не влияющих на результат программы;

удаление бесполезных операторов, вычисляющих вспомога­тельные переменные, используемые только для подстановки в дру­гие выражения;

удаление объявленных, но неиспользуемых переменных и типов;

удаление идентичных операторов;

удаление процедур, к которым нет обращений.

Необходимость в такого рода чистках возникает потому, что очень часто программист «захлебывается» в общем количестве пе­ременных и процедур одного слишком большого модуля. Подчас он объявляет переменные, которые потом нигде в программе не использует.

Например, программист может объявить целочисленную пере­менную для организации цикла, а затем, спустя какое-то время, для организации другого цикла объявляет еще одну переменную, забыв о существовании предыдущей и возможности ее повторного ис­пользования.

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

Программист должен учиться как можно экономнее использо­вать память. Каждую структуру следует тщательно продумывать и не требовать, скажем, для переменной, в которой будут хранить­ся координаты текстового экрана, двухбайтового типа.

Это так называемая экономия на типе переменной. Существует и еще ряд способов более экономного расходования памяти:

1) Глобальная экономия памяти подразумевает совмещение по памяти не существующих одновременно статических переменных. Модульное программирование также подразумевает разнесение объявлений несвязанных переменных в различные модули.

2) Изменение области существования переменной.

3) Перемещение оператора объявления переменной (резервиро­вания памяти) ближе к тому участку программы, в котором содер­жатся операторы, использующие эту переменную, то есть перемен­ную следует объявлять в границах того блока, где она используется.

4) Экономия стека: при передаче массива в качестве параметра подпрограммы, следует использовать ссылку на массив. Помимо экономии памяти это приводит также и к экономии времени за счет того, что система не создает копии передаваемого массива в стеке.



<== предыдущая лекция | следующая лекция ==>
ОТЛАДКА | ПОНЯТИЕ АЛГОРИТМА И ЕГО СВОЙСТВА


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.286 сек.