Практическое руководство. Настройка оптимизации компилятора (Visual Basic). Оптимизация visual studio 2013
Профильная оптимизация в концентраторе производительности и диагностики
Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.
Профильная оптимизация подключаемого модуля Visual C++ в концентраторе производительности и диагностики ускоряет взаимодействие профильной оптимизации для разработчиков. Подключаемый модуль можно скачать с веб-сайта Visual Studio.
Благодаря профильной оптимизации (PGO) можно создать сборки x86 и x64 собственные приложения, оптимизированные для способа, которым пользователи взаимодействуют с ними. Профильная оптимизация — многоступенчатый процесс: сначала выполняется сборка приложения, которое инструментировано для профилирования, а затем проводится "обучение", то есть инструментированное приложение запускается с разными сценариями взаимодействия с пользователем. Собранные данные профилирования сохраняются, затем происходит перестроение приложения с использованием результатов, которые направят оптимизацию всей программы. Хотя вы можете выполнить следующие действия по отдельности в Visual Studio или из командной строки, подключаемый модуль профильной оптимизации централизует и упрощает процесс. Подключаемый модуль профильной оптимизации задает все необходимые параметры, руководит каждым шагом, показывает анализ, а затем использует результаты для настройки сборки, чтобы оптимизировать каждую функцию по размеру и скорости. Подключаемый модуль профильной оптимизации также упрощает повторное обучение приложения и обновление данных для оптимизации сборки по мере внесения изменений в код.
Необходимо загрузить подключаемый модуль профильной оптимизации и установить его в Visual Studio перед тем, как использовать его в концентраторе производительности и диагностики.
Сначала создайте простое настольное приложение Win32 в Visual Studio. Если у вас уже есть собственное приложение, которое нужно оптимизировать, то его можно использовать и пропустить этот шаг.
Создание приложения
В строке меню выберите Файл, Создать, Проект.
В левой области диалогового окна Создать проект разверните Установленные, Шаблоны, Visual C++, затем выберите Библиотека MFC.
В центральной области выберите Приложение MFC.
Укажите имя проекта — например, SamplePGOProject — в поле Имя. Нажмите кнопку ОК.
На странице Обзор диалогового окна Мастер приложений MFC нажмите кнопку Готово.
Затем задайте конфигурацию сборки приложения в "Выпуск" для подготовки его для действий сборки и обучения профильной оптимизации.
Чтобы задать конфигурацию сборки
В строке меню последовательно выберите пункты Сборка и Диспетчер конфигураций.
В диалоговом окне Диспетчер конфигураций выберите разворачивающуюся кнопку Активная конфигурация решения, затем выберите Выпуск. Нажмите кнопку Закрыть.
Откройте "Концентратор производительности и диагностики" в строке меню, выберите Анализ, Производительность и диагностика. Откроется страница сеанса диагностики со средствами анализа, доступными для данного типа проекта.
В разделе Доступные инструменты установите флажок Оптимизация с использованием профиля. Выберите кнопку Запустить, чтобы запустить подключаемый модуль профильной оптимизации.
На странице Оптимизация с использованием профиля описаны действия, которые подключаемый модуль предпринимает для повышения производительности приложения. Нажмите кнопку Запуск.
В разделе Инструментирование можно выбрать параметр Обучение изначально включено, чтобы выбрать, включать ли точку запуска приложения как часть обучения. Если этот параметр не установлен, данные обучения не записываются в запущенное инструментированное приложение, пока обучение не будет явно включено.
Нажмите кнопку Инструментировать, чтобы выполнить сборку приложения со специальным набором параметров компилятора. Компилятор вставляет инструкции зонда в созданный код. Эти инструкции записывают данные профилирования на этапе обучения.
По завершению сборки инструментированного приложения оно запускается автоматически.
Если во время сборки возникли какие-либо ошибки или предупреждения, исправьте их, а затем выберите команду Перезапуск сборки, чтобы перезапустить инструментированную сборку.
Когда приложение запустится, можно использовать ссылки Начать обучение и Приостановить обучение в разделе Обучение, чтобы управлять записью информации профилирования. Вы можете использовать ссылки Остановить приложение и Запустить приложение, чтобы остановить и перезапустить приложение.
Во время обучения просматривайте сценарии пользователя сбора, чтобы захватить данные профилирования, которые нужны подключаемому модулю профильной оптимизации для оптимизации кода. После завершения обучения закройте приложение или выберите ссылку Остановить приложение. Нажмите кнопку Анализ, чтобы запустить шаг анализа.
Когда анализ завершен, в области Анализ отображается отчет данных профилирования, которые были зафиксированы на этапе обучения пользовательским сценариям. Этот отчет можно использовать для исследования того, какие функции приложения были вызваны чаще всех и на какие из них было потрачено больше времени. Подключаемый модуль профильной оптимизации использует эти сведения, чтобы определить, какие функции приложения требуют оптимизации быстродействия, а какие — оптимизации по размеру. Подключаемый модуль профильной оптимизации настраивает оптимизации сборки для создания наименьшего, наиболее быстрого приложения для сценариев пользователя, записанных в ходе обучения.
Если обучение зафиксировало ожидаемые данные профилирования, можно выбрать Сохранить изменения для сохранения в проекте проанализированных данных профилирования, чтобы оптимизировать последующие сборки. Чтобы отменить данные профилирования и начать обучение с самого начала, выберите Повторить обучение.
Файл данных профилирования сохраняется в проекте в папке PGO Training Data. Эти данные используются для управления параметрами компилятора по оптимизации сборки в приложении.
После анализа, подключаемый модуль профильной оптимизации настраивает параметры сборки в проекте так, чтобы использовать данные профилирования для выборочной оптимизации приложения во время компиляции. Можно продолжить изменение и выполнение сборки приложения с теми же данными профилирования. После сборки приложения в выходных данных сборки сообщается, сколько функций и инструкций было оптимизировано с использованием данных профилирования.
Если во время разработки выполняется значительное изменение кода, вы можете повторить обучение, чтобы получить лучшие показатели оптимизации приложения. Рекомендуется повторить обучение приложения, если в выходных данных сборки сообщается, что с помощью данных профилирования было оптимизировано менее 80 процентов функций и инструкций.
msdn.microsoft.com
/Zo (улучшение оптимизированного процесса отладки)
Рекомендуем использовать Visual Studio 2017
Эта документация перемещена в архив и не поддерживается.
Visual Studio 2015
Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.
Создает расширенные сведения об отладке для оптимизированного кода в неотладочных сборках.
Переключатель компилятора /Zo создает расширенные сведения об отладке для оптимизированного кода. При оптимизации могут использоваться регистраторы для локальных переменных, изменения в порядке кода, векторизация циклов и вызовы встроенных функций. Такая оптимизация может скрывать связи между исходным кодом и кодом скомпилированного объекта. Переключатель /Zo указывает компилятору о необходимости создания дополнительных сведений об отладке для локальных переменных и встроенных функций. Используйте его для просмотра переменных в окнах Автоматические, Локальные и Просмотр при выполнении пошаговых инструкций по оптимизированному коду в отладчике Visual Studio. Он также позволяет выполнять трассировки стека для отображения встроенных функций в отладчике WinDBG. Отладочные сборки с отключенной оптимизацией (/Od) не требуют создания дополнительных сведений об отладке при указании /Zo. Используйте переключатель /Zo для отладки конфигураций выпуска с включенной оптимизацией. Дополнительные сведения о переключателях оптимизации см. в разделе Параметры /O (оптимизация кода). Параметр /Zo включен по умолчанию в Visual Studio 2015 при указании отладочной информации с /Zi или /Z7. Укажите /Zo-, чтобы явно отключить этот параметр компилятора.
Переключатель /Zo доступен в Visual Studio 2013 с обновлением 3 и заменяет не документированный ранее переключатель /d2Zi+.
Установка параметра компилятора /Zo в Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее: Открытие свойств страниц проекта.
Выберите папку Свойства конфигурации, а затем папку C/C++.
Выберите страницу свойств Командная строка.
Измените свойство Дополнительные параметры, включив параметр /Zo, а затем нажмите кнопку ОК.
Установка данного параметра компилятора программным способом
Параметры /O (оптимизация кода)/Z7, /Zi, /ZI (формат отладочной информации)Изменить и продолжить
msdn.microsoft.com
Советы и рекомендации по работе в Visual Studio
Рекомендуем использовать Visual Studio 2017
Эта документация перемещена в архив и не поддерживается.
Visual Studio 2015
Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.
Перемещаться между компонентами Visual Studio 2013 можно более эффективно, если использовать описанные в этом разделе сочетания клавиш. Более общие сведения см. в разделе Сочетания клавиш в Visual Studio. Дополнительные сведения об оптимизации Visual Studio для использования специальных возможностей см. в разделе Специальные возможности. Советы и рекомендации.
Перетащить с плавающих наборов вкладок | CTRL+щелкнуть для выделения нескольких элементов |
Развернуть плавающее окно | Дважды щелкнуть заголовок окна |
Повторное закрепить плавающее окно | CTRL+дважды щелкнуть заголовок окна |
Закрыть активный документ | Ctrl+F4 |
Показать список открытых файлов | CTRL+ALT+СТРЕЛКА ВНИЗ |
Показать все плавающие окна | CTRL+SHIFT+M |
Переместить или закрепить плавающие окна | WIN+СТРЕЛКА ВЛЕВО или WIN+СТРЕЛКА ВПРАВО |
Развернуть или свернуть окна | WIN+СТРЕЛКА ВВЕРХ или WIN+СТРЕЛКА ВНИЗ |
Показать список переходов | WIN+ALT+N |
Запустить новый экземпляр | WIN+SHIFT+N |
Переключиться между окнами | WIN+N |
Искать в обозревателе решений | CTRL+; |
Поместить фокус в поле поиска в любом окне инструментов | ALT+`, когда окно инструментов имеет фокус |
Быстрый запуск | CTRL+Q |
Быстрый запуск — задание области результатов | - @opt — параметры- @cmd — команды- @mru — последние использовавшиеся- @doc — открытые документы |
Искать в "Инструменты" > "Параметры" | CTRL+E |
Быстрый поиск | CTRL+F |
Быстрый поиск — следующий результат | ВВОД |
Быстрый поиск — предыдущий результат | SHIFT+ВВОД |
Быстрый поиск — развернуть раскрывающийся список | Alt+Вниз |
Закрыть поиск | ESC |
Быстрая замена | CTRL+H |
Быстрая замена — заменить следующий | Alt+R |
Быстрая замена — заменить все | ALT+A |
Поиск в файлах | Ctrl+Shift+F |
Заменить в файлах | Ctrl+Shift+H |
Режим предложений IntelliSense | CTRL+ALT+ПРОБЕЛ (переключение) |
Принудительно показывать IntelliSense | CTRL+J |
Смарт-теги | CTRL+. |
Выбор фрагментов кода | CTRL+K,X или ?,TAB (VB) |
Окружить | CTRL+K,S |
Показать краткие сведения | CTRL+K,I |
Функция "Перейти к" | CTRL+, |
Перейти к определению | F12 |
Показать определение | ALT+F12 |
Перейти к стеку определений | CTRL+SHIFT+8 (назад), CTRL+SHIFT+7 (вперед) |
Перейти по выделенным ссылкам | CTRL+SHIFT+СТРЕЛКА ВВЕРХ (предыдущая), CTRL+SHIFT+СТРЕЛКА ВНИЗ (следующая) |
Редактор, масштаб | CTRL+SHIFT+> (больше), CTRL+SHIFT+< (меньше) |
Выбор блока | Удерживать ALT и перетащить указатель мыши, клавиши SHIFT+ALT+СТРЕЛКА |
Переместить строку вверх или вниз | ALT+СТРЕЛКА ВВЕРХ или ALT+СТРЕЛКА ВНИЗ |
Показать определение | ALT+F12 |
Закрыть окно "Показать определение" | ESC |
Повысить уровень окна "Показать определение" до обычной вкладки документа | CTRL+ALT+HOME |
Перемещение между несколькими окнами "Показать определение" | CTRL+ALT+- и CTRL+ALT+= |
Перемещение между несколькими результатами "Показать" | F8 и SHIFT+F8 |
Переключение между окном редактора кода и окном "Показать определение" | SHIFT+ESC |
Добавить кнопки | Нажать кнопку переполнения панели инструментов |
Поле со списком поиска на панели инструментов "Стандартная" | CTRL+D |
Режим команд поля поиска | Ввести ">" |
Создать новый псевдоним | Команда >alias новый_псевдоним |
Начало отладки | F5 |
Остановить отладку | SHIFT+F5 |
Перезапустить отладку | Ctrl+Shift+F5 |
Шаг с обходом | F10 |
Шаг с заходом | F11 |
Шаг с выходом | SHIFT+F11 |
Выполнение до текущей позиции | Ctrl+F10 |
Задать следующий оператор | Ctrl+Shift+F10 |
Задать и переключить состояние точки останова | F9 |
Отключить точку останова | Ctrl+F9 |
Окно интерпретации | Ctrl+Alt+I |
Режим команд окна интерпретации | Ввести ">" |
Очистить буфер окна интерпретации | >cls |
Значение печати окна интерпретации | ?varname |
См. раздел Сочетания клавиш: Visual Studio Online, веб-портал TFS и Team Explorer.
Блог Visual StudioБлог Visual Studio Tips and TricksVisual Studio Toolbox на Channel 9Visual Studio UserVoiceVisual Studio Connect Bugs
msdn.microsoft.com
Практическое руководство. Настройка оптимизации компилятора (Visual Basic)
Рекомендуем использовать Visual Studio 2017
Эта документация перемещена в архив и не поддерживается.
В языке Visual Basic компилятор поддерживает несколько видов оптимизации, которые в некоторых случаях способны уменьшить файл приложения, ускорить выполнение приложения или ускорить процесс построения. Оптимизации компилятора задаются в диалоговом окне Дополнительные параметры компилятора, доступном из страницы КомпиляцияКонструктора проектов.
Для удаления проверки переполнения целочисленных значений
Выбрав проект в обозревателе решений, в меню Проект выберите пункт Свойства.
Перейдите на вкладку Compile.
Нажмите кнопку Дополнительные параметры компиляции.
В диалоговом окне Дополнительные параметры компилятора установите флажок Удалить проверки переполнения для целочисленных значений.
Для включения оптимизации в выходном файле
Выбрав проект в обозревателе решений, в меню Проект выберите пункт Свойства.
Перейдите на вкладку Compile.
Нажмите кнопку Дополнительные параметры компиляции.
В диалоговом окне Дополнительные параметры компилятора установите флажок Включить оптимизацию.
Для создания отладочной информации
Выбрав проект в обозревателе решений, в меню Проект выберите пункт Свойства.
Перейдите на вкладку Compile.
Нажмите кнопку Дополнительные параметры компиляции.
Откроется диалоговое окно Дополнительные параметры компилятора. В списке Создать отладочную информацию выберите значение Полная, Отсутствует или Только PDB.
Задачи
Ссылки
Другие ресурсы
msdn.microsoft.com
Диалоговое окно "Дополнительные параметры компилятора" (Visual Basic)
Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.
Дополнительные свойства конфигурации построения проекта можно задать в диалоговом окне Дополнительные параметры компилятора конструктора проекта. Это диалоговое окно относится только к проектам Visual Basic.
Чтобы получить доступ к этому диалоговому окну, выполните следующие действия.
В Обозреватель решений выберите узел проекта (не узел Решение ).
В меню Проект выберите пункт Свойства. В появившемся конструкторе проектов перейдите на вкладку Компиляция.
На странице Страница "Компиляция" в конструкторе проектов (Visual Basic) выберите Конфигурация и Платформа. В упрощенных конфигурациях построения списки Configuration и Platform не отображаются. Для получения дополнительной информации см. Debug and Release Project Configurations.
Щелкните Дополнительные параметры компиляции.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE. |
Следующие параметры позволяют задать механизмы оптимизации, которые в некоторых случаях уменьшают размер файла, ускоряют выполнение программы или сокращают продолжительность процесса построения.
Удалить проверки переполнения для целочисленных значенийПо умолчанию этот флажок снят, чтобы проверка переполнения целые числа. Выделите этот флажок, чтобы удалить проверка переполнения целые числа. Если выделить этот флажок, вычисления целого числа могут выполняться быстрее. Однако если удалить переполнение проверку и ресурсы тип данных переполнение, неверные результаты могут храниться без вызываться ошибки.
Если выбрана условий переполнения и переполнения операции целые числа, возникает исключение OverflowException. Если условий переполнения не проверяются, переполнения операции целые числа, не вызывает исключение.
Включить оптимизациюПо умолчанию этот флажок не устанавливается, чтобы отключить оптимизацию компилятора. Установите этот флажок, чтобы включить оптимизацию компилятора. Оптимизация кода делает код более быстрым, коротким и более эффективным. Однако поскольку оптимизации вызывают перераспределение кода в выходном файле, оптимизаций могут сделать отладку сложным.
Базовый адрес DLLВ этом текстовом поле отображается базовый адрес библиотеки DLL по умолчанию в шестнадцатеричном формате. В проектах библиотек классов и библиотек элементов управления с помощью этого текстового поля можно задать базовый адрес, который должен использоваться при создании библиотеки DLL.
Создать отладочную информациюВыберите из списка вариант Отсутствует, Полная или Только PDB. Вариант Отсутствует указывает, что отладочной информации генерироваться не будет. Вариант Полная указывает, что будет генерироваться полная отладочная информация, а вариант Только PDB — только отладочная информация PDB. По умолчанию этот параметр имеет значение Полная.
Константы условной компиляции имеют результат аналогичен параметрам использования директивы препроцессора #Const в файле источника, за исключением того, что константы определены открытым и применяются ко всем файлам в проекте. Константы условной компиляции можно использовать вместе с директивой #Else #If… Then…, чтобы компилировать файлы источника условно. Дополнительные сведения см. в разделе Условная компиляция.
Определить константу DEBUGПо умолчанию этот флажок установлен, указывая тем самым, что константа DEBUG будет задана.
Определить константу TRACEПо умолчанию этот флажок установлен, указывая тем самым, что константа TRACE будет задана.
Настраиваемые константыВведите в это текстовое поле все настраиваемые константы для данного приложения. Записи должны быть разделены запятыми с соблюдением следующей формы: Name1="Value1",Name2="Value2",Name3="Value3".
Создать сборки сериализацииЭтот параметр определяет, будет ли компилятор создавать сборки сериализации XML. Сборки сериализации могут повысить производительность класса XmlSerializer при запуске, если данный класс использовался в коде для сериализации типов. По умолчанию этот параметр имеет значение Авто, обозначающее, что сборки сериализации будут генерироваться только в том случае, если для кодирования типов в формат XML в данном коде использовался класс XmlSerializer. Значение Выкл. обозначает, что независимо от использования в коде класса XmlSerializer сборки сериализации генерироваться не будут. Значение Вкл. обозначает, что сборки сериализации будут генерироваться всегда. Сборкам сериализации присваиваются имена TypeName.XmlSerializers.dll.
Страница "Компиляция" в конструкторе проектов (Visual Basic)
msdn.microsoft.com
Профильная оптимизация
Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.
Профильная оптимизация позволяет оптимизировать выходной файл, используя данные из тестовых запусков EXE- или DLL-файла. Данные представляют, как программа, вероятно, будет работать в рабочей среде.
Профильные оптимизации доступны только при компиляции в машинный код для x86 и x64. Они недоступны для выходных файлов, которые будут запускаться в среде CLR. Даже если создать сборку со смешанным машинным и управляемым кодом (компиляция с параметром /clr), невозможно использовать профильную оптимизацию только для машинного кода. Попытка построить проект с этими параметрами, заданными в среде разработки, приведет к ошибке построения.
Вы можете упростить и ускорить процесс оптимизации с помощью подключаемого модуля автоматической профильной оптимизации для Visual C++ в концентраторе производительности и диагностики Visual Studio. Или же можно выполнить оптимизацию вручную в Visual Studio или в командной строке. Мы рекомендуем использовать подключаемый модуль, поскольку это более простой метод. Сведения о том, как получить подключаемый модуль и использовать его для оптимизации приложения, см. в разделе Подключаемый модуль профильной оптимизации.
Подключаемый модуль профильной оптимизации и ручная профильная оптимизация используют следующие действия для оптимизации приложения.
Компиляции одного или нескольких файлов исходного кода с параметром /GL.
Каждый модуль, построенный с параметром /GL, может быть проанализирован во время тестовых запусков профильной оптимизации для получения информации о поведении во время выполнения. Не каждый модуль в построении профильной оптимизации требуется компилировать с параметром /GL. Однако только модули, скомпилированные с его использованием, будут обработаны и доступны для профильной оптимизации.
Компоновка с параметром /LTCG:PGINSTRUMENT.
/LTCG:PGINSTRUMENT создает пустой PGD-файл. После добавления данных тестового запуска в PGD-файл они могут использоваться как входные данные для следующего этапа компоновки (создание оптимизированного образа). При указании параметра /LTCG:PGINSTRUMENT можно также задать параметр /PGD с нестандартным именем или расположением PGD-файла.
Профилирование приложения.
Каждый раз, когда профилируемый сеанс EXE или профилируемый DLL-файл выгружается, создается PGC-файл имя_приложения!#.pgc. PGC-файл содержит сведения об определенном тестовом запуске приложения. # — это номер, начиная с 1, который увеличивается в зависимости от числа других файлов имя_приложения!#.pgc в каталоге. Можно удалить PGC-файл, если тестовый запуск не представляет сценарий, который вы хотите оптимизировать.
Во время тестового запуска можно принудительно закрыть открытый в текущий момент PGC-файл и создать новый PGC-файл с помощью служебной программы pgosweep (например, если конец тестового сценария не совпадает с завершением работы приложения).
При профилировании приложения параметр можно использовать PogoSafeMode. Этот параметр позволяет указать, следует ли профилировать приложение в безопасном или в быстром режиме. Дополнительные сведения об этих элементах см. в разделе PogoSafeMode.
Компоновка с параметром /LTCG:PGOPTIMIZE.
Параметр /LTCG:PGOPTIMIZE создает оптимизированный образ. На этом шаге в качестве входных данных принимается PGD-файл. Подробнее об этом см. в разделе /LTCG:PGOPTIMIZE.
Можно даже создать оптимизированный выходной файл и позже определить, что дополнительное профилирование будет полезно для создания более оптимизированного образа. Если инструментированный образ и соответствующий PGD-файл доступны, можно выполнить дополнительные тестовые запуски и повторно создать оптимизированный образ с новым PGD-файлом.
Ниже приведен список профильных оптимизаций.
Встраивание — например, если существует функция A, которая часто вызывает функцию B, а функция B относительно небольшая, то профильная оптимизация встроит функцию B в функцию A.
Отражение виртуального вызова — если виртуальный или другой вызов через указатель функции часто предназначен для определенной функции, профильная оптимизация может вставить условно выполняемый прямой вызов функции.
Распределение регистров — оптимизация с данными профиля улучшает распределение регистров.
Простая блочная оптимизация позволяет разместить часто выполняемые основные блоки, которые временно выполняются во фрейме, в одном наборе страниц (локально). Это минимизирует число используемых страниц, уменьшая тем самым затраты памяти.
Оптимизация размера и скорости — функции, на которые программа тратит много времени, могут быть оптимизированы по скорости.
Структура функции — на основе графа вызовов и поведения профилируемого вызываемого и вызывающего объектов функции, которые, как правило, относятся к одному пути выполнения, размещаются в одном разделе.
Оптимизация условного ветвления — с помощью зондов значений профильная оптимизация может определить, используется ли заданное значение в операторе switch чаще, чем другие значения. Затем это значение может быть извлечено из оператора switch. То же можно сделать с инструкциями if/else, где оптимизатор может упорядочить их так, чтобы блок if или else размещался первым в зависимости от того, какой блок чаще получает значение true.
Отделение неиспользуемого кода — код, который не вызывается во время профилирования, перемещается в специальный раздел, добавляемый в конец набора разделов. Это позволяет вынести раздел с часто используемых страниц.
Отделение кода EH — код EH, который выполняется очень часто, во многих случаях можно поместить в отдельный раздел, если профильной оптимизации удается определить, что исключения возникают только при исключительных условиях.
Внутренние функции памяти — расширение внутренних компонентов можно оптимизировать, если определить, какие из них часто вызываются. Встроенная функция может также быть оптимизирована на основе размера блока перемещения или копирования.
Подробнее о ручной оптимизации в интегрированной среде разработки или в командной строке см. в разделе Пошаговое руководство. Использование профильной оптимизации.
Подключаемый модуль профильной оптимизации
Средства профильной оптимизации
Практическое руководство. Слияние нескольких профилей PGO в единый профиль
Средства построения С/C++
msdn.microsoft.com
/Og (Виды глобальной оптимизации)
Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.
Предоставляет виды локальной и глобальной оптимизации, автоматическое выделение регистров и оптимизацию цикла. Устаревший.
Доступны следующие виды оптимизации.
Локальное и глобальное исключение общей части выражения
При этом виде оптимизации значение общей части выражения рассчитывается однократно. В следующем примере, если значения частей выражения b и c не изменяются для трех выражений, компилятор может назначить вычисление b + c во временную переменную и заменить переменную для b + c:
a = b + c; d = b + c; e = b + c;При локальной оптимизации общей части выражения компилятор проверят короткие разделы кода на наличие общих частей выражения. При глобальной оптимизации общей части выражения компилятор выполняет поиск общих частей выражения в целых функциях.
Автоматическое выделение регистров
Этот вид оптимизации позволяет компилятору хранить часто используемые переменные и части выражения в регистрах; ключевое слово register игнорируется.
Оптимизация цикла
При этом виде оптимизации неизменяемые части выражения удаляются из тела цикла. Оптимальный цикл включает только те выражения, значения которых изменяются при каждом выполнении цикла. В следующем примере выражение x + y в теле цикла не меняется:
i = -100; while( i < 0 ) { i += x + y; }После оптимизации вычисление значения для выражения x + y выполняется однократно, а не при каждом выполнении цикла:
i = -100; t = x + y; while( i < 0 ) { i += t; }Оптимизация цикла является значительно более эффективной, если компилятор может предположить отсутствие псевдонимов, что определяется атрибутами __restrict, noalias или restrict.
Примечание Можно разрешать или запрещать глобальную оптимизации для каждой функции, используя директиву pragma optimize с параметром g.
/Og также включает оптимизацию именованных возвращаемых значений, при которой для стековых возвращаемых значений не используются конструкторы копирования и деструкторы. Дополнительные сведения см. в разделе /O1, /O2 (минимизировать размер, максимизировать скорость).
Связанные сведения см. в разделах Создание встроенных функций (/Oi) и Полная оптимизация (/Ox).
/Og не рекомендуется использовать; используйте/O1 или /O2. Для получения дополнительной информации см. Deprecated Compiler Options in Visual C++ 2005.
Установка данного параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.
Откройте папку C/C++.
Выберите страницу свойств Командная строка.
Введите параметр компилятора в поле Дополнительные параметры.
Установка данного параметра компилятора программным способом
Параметры /O (оптимизация кода)Параметры компилятораНастройка параметров компилятора
msdn.microsoft.com