Оптимизация программного кода. Основные возможности оптимизации кода программистом и компилятором
Оптимизация программного кода называют изменение корректного кода, направленное на повышение его эффективности. «Оптимизация» подразумевает внесение небольших изменений, затрагивающих один класс, один метод, а чаще всего – несколько строк кода. Крупномасштабные изменения проекта или другие высокоуровневые способы повышения производительности оптимизацией не считаются. Это не самый эффективный способ повышения производительности. Улучшение архитектуры программы, перепроектирование классов и выбор более эффективного алгоритма - приводят к более впечатляющим результатам. Кроме того, оптимизация кода не самый легкий способ повысить производительность: легче купить новое оборудование или компилятор с улучшенным модулем оптимизации. Наконец, это не самый дешевый способ повысить производительность: на оптимизацию кода вручную изначально уходит много времени, а потом оптимизированный код труднее сопровождать.
Оптимизация программистом.
1). Расширить структуру данных добавлением дополнительной информации или изменить представление данных в этой структуре. 2). Вычисление результатов заранее и их хранение, для последующего использования. 3). Применение упаковки данных. 4). Внутренний цикл должен содержать min возможное количество проверок, а лучше всего только одну. 5). Удаление безусловных переходов. 6). Логические проверки должны быть расположены так, чтобы более быстрые условия, которые чаще оказываются правильными, стояли перед более медленными условиями, которые реже оказываются правильными.7).Логическая функция на небольшом множестве исходных значений может быть заменена таблицей, представляющей это множество.8).Удаление одинаковых выражений. 9).Если два и более одинаковых выражения часто вычисляются подряд, их следует вынести в подпрограмму. 10). Изменение типов данных может оказаться эффективным способом сокращения кода и повышения его быстродействия. 11). Переписывание кода на низкоуровневом языке. При низком быстродействии код следует переписать на языке низкого уровня. Если вы пишите на С++, языком низкого уровня может быть Assembler. Переписывание кода на низкоуровневом языке обычно положительно влияет на быстродействие кода.
Оптимизация компилятором.
Методы оптимизации кода могут применяться на разных уровнях синтаксических конструкций: 1). на уровне оператора - большинство компиляторов выполняют некоторую оптимизацию на этом уровне. 2). на уровне блока – оптимизирующий компилятор выделяет операционную структуру программе путем конструирования ориентированного потокового графа программы, в кот каждая вершина представляет основной блок, а связи м/у вершинами представляют потоки управления. Большинство компиляторов производят оптимизацию на уровне блока. 3). на уровне цикла. 4). на уровне программы - наиболее сложный уровень оптимизации.
Чем выше уровень оптимизации, тем больше возможностей повышения быстродействия программного модуля. Однако затраты на применение большей степени оптимизации могут значительно увеличить время компиляции.
42. Оформление программ: основные пункты.
1) Описание реализации (язык, среда программирования, тестирования, предполагаемого исполнения):
· размеры в байтах, операциях, строках;
· размеры необходимой памяти под данные;
· требуемые технические ресурсы.
2) Обращение к подпрограмме (число, тип и порядок передачи входных параметров): способ передачи (по ссылке или по значению).
3) Описание возвращаемых параметров:
· параметр, который возвращает сама функция;
· описание входных параметров, которые функция изменяет.
4) Описание исключительных ситуаций и реакция программы на них.
5) Описание сообщений программы, если они есть.
6) Краткое описание алгоритма:
· если известен автор, то указать его имя;
· если имеет название, то указать его;
· назвать источник или где приведен текст программы, откуда был взят алгоритм;
· можно привести блок-схему.
7) Привести автора программы и время написания программы.
8) Описать все входные и выходные файлы и краткое их содержимое.
9) Привести структуры записи всех файлов:
· разбивка по полям записи;
· для каждого поля указать тип, длину смещения от начала записи.