Оптимизация кодов для любого языка всегда заставляет идти на компромиссы. Такими компромиссами являются:
1) сокращение используемого объема памяти в результате снижения быстродействия;
2) увеличение быстродействия в результате ухудшения возможностей сопровождения и доступности
текста программы для чтения;
3) уменьшение времени деятельности программы
в результате увеличения времени ее разработки.
Среди операций, которые приведены ниже, каждая
следующая требует больше времени, чем предшествующая. Рассмотрим эти операции: регистр-регистр,
операции с памятью, операции с диском и операции
взаимодействия с пользователем. Так что не стоит тратить силы на сокращение нескольких машинных циклов
в программе, когда скорость ее исполнения ограничена
операциями обращения к дисковым файлам. Взамен
можно применить сокращение числа таких операций.
А после выполнения того, что, в принципе, могло бы
быть оптимизацией, следует осуществить тщательную
проверку полученных результатов.
Прежде чем рассматривать настройку некоторой
программы, следует убедиться, что она правильная
и полная, что применяется правильный для решения
поставленной задачи подход и что составлен наиболее ясный, наиболее простой, наиболее структурированный код, который только был возможен.
Если программа удовлетворяет всем приведенным
критериям, то на самом деле ее объем и скорость вы-полнения чаще всего будут вполне приемлемыми без каких-либо дальнейших усовершенствований. Но только применение ассемблера само по себе приводит к повышению скорости выполнения
программы в 2—3 раза и примерно к такому же уменьшению размера по сравнению с такой же программой
на языке высокого уровня. Кроме того, если что-то делает проще чтение программы и ее сопровождение, то
обычно при этом увеличивается скорость исполнения.
Можно отказаться от «макаронных» кодов со многими
ненужными переходами и вызовами подпрограмм, а
также предпочтение простых прямолинейных машинных команд похожим сложным.
Кроме того, самой главной заботой должны быть
ощущения потенциального пользователя при работе с
данной программой: насколько производительной покажется программа ему? Если о полученной программе складывается мнение, как о неуклюжей, то есть вероятность, что она не будет должным образом
оценена. Примером является судьба пакета ToolBook.