Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Савчук и чуток программирования.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.45 Mб
Скачать

11. Эффективность программ.

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

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

Обычно, большая часть времени расходуется на выполнение очень небольшой части программы (5% ее объема), называемой критической областью.

Требования к эффективности следует определять на этапе проектирования.

Отношение к эффективности

Существуют три типа программ по требованиям к эффективность:

  1. часто используемые программы;

  2. производственные программы (используются длительное время);

  3. единажды или редко используемые программы (например, для однократных вычислений или испытаний).

Следует оптимизировать те программы, которые используются многократно.

Эффективность или удобочитаемость?

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

Удобочитаемость важнее эффективности.

Оптимизирующие компиляторы

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

Типы оптимизации компилятора:

  1. низкоуровневая (машинно-зависивамая) — на уровне элементарных команд, например, инструкций процессора;

  2. высокоуровневая (машинно-независимая) — на уровне структурных элементов программы, н-р, ветвления и циклы.

Оптимизация программ

Производится по двум критериям: время и память.

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

Стадии оптимизации по времени:

Сегментация программы — разбиение на подпрограммы.

Профилировка подпрограмм — определение процента времени выполнения отдельных подпрограмм.

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

Для каждой подпрограммы вычисляется коэффициент улучшения = (процент времени × процент улучшения) / усилия; подпрограммы с большим значением коэффициента подлежат оптимизации в первую очередь.

Подходы к оптимизации: «чистка» и перепрограммирование.

Оптимизаци памяти

Экономное использование памяти почти всегда сопровождается увеличением времени работы программистов и времени выполнения программы.

Оверлейность — возможность перенесения подпрограмм в ОЗУ из другого типа памяти , что позволяет нескольким подпрограммам использовать одну область памяти. Недостаток — постоянное обращение к диску. Возможности оверлея доступны только при наличии вирт памяти.

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

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