Технология разработки программного обеспечения

12 ЭФФЕКТИВНОСТЬ И ОПТИМИЗАЦИЯ ПРОГРАММ
12.1 Понятие эффективности программ

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

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

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

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

Не следует забывать и о том, что многие способы снижения временных затрат приводят к увеличению емкостных и, наоборот, уменьшение объема памяти может потребовать дополнительного времени на обработку. И тем более не следует «платить» за увеличение эффективности снижением технологичности разрабатываемого программного обеспечения. Исключения возможны лишь при очень жестких требованиях и наличии соот¬ветствующего контроля за качеством.

Частично проблему эффективности программ решают за программиста компиляторы.

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

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

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