Табл. 1.26. Опции компилятора, включающие оптимизации и встраивание
| Инструментарий |
Оптимизация |
Встраивание |
| GCC |
-O3 |
-finline-functions ¹ |
| Visual C++ Intel |
-O2 |
-Оb1 |
| Metrowerks |
-opt full |
-inline auto -inline level=8 |
| Comeau (Unix) |
-O3 |
|
| Comeau (Windows) |
To же, что и у основного компилятора, но вместо тире (-) используется слеш (/) |
-inlining |
| Borland |
-O2 |
-vi |
| Digital Mars |
-o+time |
Включено по умолчанию |
¹ Эта опция автоматически включается при указании -O3 .
Boost.Build предоставляет похожий механизм создания окончательной сборки: просто добавьте к требованиям цели releaseили используйте опцию командной строки variant=release , которую можно сократить до просто release .
Некоторые IDE также предоставляют простой способ создания окончательной сборки. Например, как я говорил в рецепте 1.21, при создании нового проекта в Visual C++ IDE автоматически генерирует отладочную и окончательную конфигурации. Чтобы запросить окончательную сборку, просто выберите в меню Build опцию Configuration Manager и в качестве активной выберите конфигурацию Release. Также можно выбрать Release в раскрывающемся списке конфигураций на стандартной панели инструментов. При следующей сборке проекта будет создана окончательная сборка.
Аналогично при создании проекта в CodeWarrior с помощью одного из шаблонов проектов Metrowerks, называемых «принадлежности» ( stationery ), IDE автоматически генерирует отладочную и окончательную цели. Имя окончательной цели может быть разным, но оно всегда должно включать слово «release» или «final». Чтобы запросить окончательную сборку, в меню Project выберите пункт Set Default Target (установить цель по умолчанию), а затем выберите элемент меню, соответствующий окончательной цели. Также можно выбрать окончательную цель в раскрывающемся списке целей в окне проекта.
C++Builder не поддерживает множественных конфигураций для одного проекта, но он предоставляет простой способ создания окончательной сборки. Чтобы запросить окончательную сборку, перейдите в Project Options→Compiler и нажмите на Release. Это включит все оптимизации и встраивание и отключит отладочную информацию.
При использовании IDE, которая не предоставляет готовых отладочной и окончательной конфигураций, такой как Dev-C++, или если требуется получить дополнительный контроль над параметрами проекта, обратитесь к таблицам с 1.27 до 1.29.
Табл. 1.27. Включение оптимизаций из IDE
| IDE |
Конфигурация |
| Visual C++ |
На странице свойств проекта перейдите к Configuration Properties→C/C++→Optimization и установите параметр Optimization в значение Maximize Speed (Максимизировать быстродействие), Favor Size or Speed (Отдавать предпочтение размеру или скорости) в значение Favor Fast Code (Отдавать предпочтение быстроте кода), а параметры Global Optimizations (Глобальная оптимизация). Enable Intrinsic Functions (Включить встроенные функции) и Omit Frame Pointers (Не включать указатели фрейма) в значение Yes (Да). Для остальных опций на этой странице оставьте значения по умолчанию |
| CodeWarrior |
В окне Target Settings перейдите к Code Generation→Global Optimizations (Генерация кода→Глобальная оптимизация) и выберите Level 4 (Уровень 4) |
| C++Builder |
В Project Options перейдите к Compiler, в разделе Code optimization (оптимизация кода) выберите Speed (Скорость) |
| Dev-C++ |
См запись для GCC в табл. 1 26 и обратитесь к рецепту 1.20 |
Табл. 1.28. Включение встраивания из IDE
| IDE |
Конфигурация |
| Visual C++ |
На страницах свойств проекта перейдите к Configuration Properties→C/C++→Optimization и установите опцию Inline Function Expansion (расширение встраиваемых функций) в значение Any Suitable (Все подходящие) |
| CodeWarrior |
В окне Target Settings перейдите к Language Settings→C/C++ Language. Установите параметр Inline Depth (Глубина встраивания) в значение 8, а остальные опции встраивания оставьте неотмеченными |
| C++Builder |
В Project Options перейдите к Compiler и в разделе Debugging снимите флажок Disable inline expansions (Отключить встраивание функций) |
| Dev-C++ |
См. запись для GCC в табл. 1.26 и обратитесь к рецепту 1.20 |
Табл. 1.29. Отключение отладочной информации в IDE
| IDE |
Конфигурация |
| Visual C++ |
На страницах свойств проекта перейдите к Configuration Properties→С/С++→General и для опции Debug Information Formal (Формат отладочной информации) выберите значение Disabled |
| Metrowerks |
В окне Target Settings перейдите к Language Settings→Linker→х86 Linker и снимите флажки Store full paths (Сохранять полные пути). Link debug info (Компоновать с отладочной информацией), и Debug inline functions (Отлаживать встраиваемые функции) |
| C++Builder |
В Project Options перейдите к Compiler и снимите флажки Debug Information и Line Number Information (информация о номерах строк) |
| Dev-C++ |
Убедитесь, что. как описано в рецепте 1.20 не указана опция командной строки -g |
Обсуждение
Большинство наборов инструментов предлагает несколько опций оптимизации, а некоторые даже десятки. Какие оптимизации следует выбрать, зависит от требований к проекту. Например, во встраиваемых системах может потребоваться выбрать оптимизации, которые ценой некоторого уменьшения скорости приводят к созданию меньших по размеру исполняемых файлов. В других случаях приоритет может отдаваться скорости. Некоторые оптимизации сделают программу быстрее на одной платформе, но медленнее на другой. Вы можете даже столкнуться с тем, что некоторые опции сделают отдельные части программы быстрее, а другие части — медленнее.
Читать дальше