[optimization] Что делает опция «Оптимизировать код» в Visual Studio? Отключить оптимизацию visual studio


JIT-отладка и оптимизация

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

При отладке управляемого приложения Visual Studio по умолчанию подавляет оптимизацию JIT-кода. Подавление JIT-оптимизации означает, что отлаживается не оптимизированный код. Код выполняется немного медленнее, поскольку он не оптимизирован, но отладка получается гораздо более тщательной. Отладка оптимизированного кода сложнее и рекомендуется, только если ошибки возникают в оптимизированном коде, но не могут быть воспроизведены в не оптимизированной версии.

JIT-оптимизация контролируется в Visual Studio параметром Отключить JIT-оптимизацию при загрузке модуля. Можно найти этот параметр на странице Общие в узле Отладка в диалоговом окне Параметры.

Если снять флажок Отключить JIT-оптимизацию при загрузке модуля, можно отлаживать оптимизированный JIT-код, но возможности отладки могут быть ограничены, поскольку оптимизированный код не соответствует исходному коду. В результате окна отладчика, такие как Локальные и Видимые, могут отображать гораздо меньше сведений, чем при отладке не оптимизированного кода.

Другое важное различие касается отладки с использованием "Только мой код". При отладке с "Только мой код" отладчик рассматривает оптимизированный код как код, не написанный пользователем, который не следует отображать во время отладки. Следовательно, при отладке JIT-оптимизированного кода вам, возможно, следует отключить "Только мой код". Дополнительные сведения см. в разделе Пошаговое выполнение "только моего кода".

Следует помнить, что параметр Отключить JIT-оптимизацию при загрузке модуля отключает оптимизацию кода при загрузке модулей. При присоединении к уже запущенному процессу, он может содержать код, который уже загружен, скомпилирован JIT и оптимизирован. Параметр Отключить JIT-оптимизацию при загрузке модуля не влияет на такой код, хотя будет влиять на модули, которые будут загружены после подключения. Кроме того, параметр Отключить JIT-оптимизацию при загрузке модуля не влияет на модули, созданные с помощью NGEN — например WinForms.dll.

Отладка управляемого кодаНавигация по коду с помощью отладчикаПрисоединение к выполняемым процессамПроцесс управляемого выполнения

msdn.microsoft.com

[optimization] Что делает опция «Оптимизировать код» в Visual Studio? [visual-studio]

Без оптимизации компилятор производит очень тупой код - каждая команда скомпилирована очень просто, так что она делает намеченную вещь. В сборках Debug по умолчанию отключены оптимизации, так как без оптимизаций исполняемый файл напрямую соответствует исходному коду.

Переменные, хранящиеся в регистрах

Как только вы включите оптимизацию, компилятор применяет много разных методов, чтобы сделать код быстрее, при этом сохраняя тем самым. Наиболее очевидным различием между оптимизированными и неоптимизированными сборками в Visual C ++ является тот факт, что значения переменных хранятся в регистрах как можно дольше в оптимизированных сборках, а без оптимизации они всегда хранятся в памяти. Это влияет не только на скорость кода, но также влияет на отладку. В результате этой оптимизации отладчик не может надежно получить значение переменной при прохождении кода.

Другие оптимизации

Существует несколько других оптимизаций, применяемых компилятором, как описано в документах MSDN / Оптимизация кода . Общее описание различных методов оптимизации см. В статье «Оптимизация компилятора Wikipedia» .

Короткий ответ: use -Ox и пусть компилятор выполнит свою работу.

Длинный ответ: эффект разного рода оптимизаций невозможно точно предсказать. Иногда оптимизация для быстрого кода фактически дает меньший код, чем при оптимизации размера. Если вы действительно хотите получить последние 0,01% производительности (по скорости или по силе), вам нужно сравнить различные комбинации параметров.

Кроме того, в последних версиях Visual Studio есть опции для более продвинутых оптимизаций, таких как оптимизация времени соединения и оптимизация на основе профиля.

code-examples.net

Практическое руководство. Отладка оптимизированного кода

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

 Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Чтобы изменить параметры, в меню "Сервис" выберите команду "Импорт и экспорт параметров". Дополнительные сведения см. в разделе Customizing Development Settings in Visual Studio.

 Примечание

Параметр компилятора /Zo (улучшение оптимизированного процесса отладки) и впервые появившийся в Visual Studio с обновлением 3, генерирует расширенные сведения по отладке для оптимизированного кода (проекты, которые не были собраны с параметром компилятора /Od. Дополнительные сведения см. в разделе Параметры /O (оптимизация кода). Это обеспечивает улучшенную поддержку отладки локальных переменных и встроенных функций.

Когда используется параметр компилятора /Zo, режим Изменить и продолжить отключается.

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

Оптимизация может повлиять на:

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

Глобальные и статические переменные всегда отображаются правильно. Это же относится к структурным типам. Если существует указатель на структуру и его значение правильно, каждая переменная-элемент структуры имеет правильное значение.

В связи с этими ограничениями следует по возможности отлаживать неоптимизированные версии программы. По умолчанию оптимизация выключена в конфигурации отладки программы Visual C++ и включена в конфигурации выпуска.

Тем не менее, ошибка может появиться только в оптимизированной версии программы. В этом случае отлаживать нужно как раз оптимизированный код.

Включение оптимизации в конфигурации построения отладки

  1. При создании нового проекта выберите в качестве конечного продукта Win32 Debug. Используйте Win32``Debug, пока программа не будет полностью отлажена и готова к созданию сборки Win32 Release. Компилятор не оптимизирует Win32 Debug.

  2. Выберите проект в обозревателе решений.

  3. В меню Вид выберите команду Страницы свойств.

  4. В диалоговом окне Страницы свойств убедитесь, что в раскрывающемся списке Конфигурация выбран пункт Debug.

  5. В окне папок слева выберите папку C/C++.

  6. В папке C++ выберите пункт Optimization.

  7. В списке свойств справа найдите Optimization. Параметр этого свойства скорее всего будет Disabled (/Od). Выберите один из параметров (Minimum Size``(/O1), Maximum Speed``(/O2), Full Optimization``(/Ox) или Custom).

  8. Если для свойства Custom выбран параметр Optimization, это означает, что можно устанавливать параметры для любого из остальных свойств, показанных в списке.

  9. Выберите "Свойства конфигурации", "C/C++", узел "Командная строка" страницы свойств проекта и добавьте (/Zo) в текстовое поле Дополнительные параметры

     Предупреждение

    Для использования /Zo требуется Visual Studio 2013 с обновлением 3 или более поздняя версия.

    Добавление параметра /Zo приведет к отключению режима Изменить и продолжить.

При отладке оптимизированного кода перейдите в окно Дизассемблирование, чтобы просмотреть, какие инструкции в действительности создаются и выполняются. При задании точек останова следует знать, что они могут двигаться вместе с инструкцией. Рассмотрим следующий пример кода:

Допустим, точка останова установлена на этой строке. Можно ожидать, что точка останова будет пройдена 10 раз. Но если код оптимизирован, она будет пройдена всего один раз. Это связано с тем, что первая инструкция задает для x значение 0. Компилятор распознает, что конкретная инструкция должна быть выполнена один раз, и убирает ее из цикла. Точка останова перемещается вместе с ней. Инструкции, которые сравнивают и увеличивают x, остаются внутри цикла. При просмотре окна Дизассемблирование для лучшего контроля размер шага автоматически равен одной инструкции, что бывает полезно при пошаговом прохождении оптимизированного кода.

Безопасность отладчикаОтладка машинного кода

msdn.microsoft.com

Что делает опция «Оптимизировать код» в Visual Studio?

Имя опции говорит что-то, но что Visual Studio / компилятор действительно делает и каковы реальные последствия?

Изменить: при поиске в Google вы можете найти этот адрес , но на самом деле я не ищу. Интересно, что происходит. Например, почему циклы получают меньше времени и т. Д.

Без оптимизации компилятор производит очень тупой код - каждая команда скомпилирована очень просто, так что она делает намеченную вещь. В сборках Debug по умолчанию отключены оптимизации, так как без оптимизаций исполняемый файл напрямую соответствует исходному коду.

Переменные, хранящиеся в регистрах

Как только вы включите оптимизацию, компилятор применяет много разных методов, чтобы сделать код быстрее, при этом сохраняя тем самым. Наиболее очевидным различием между оптимизированными и неоптимизированными сборками в Visual C ++ является тот факт, что значения переменных хранятся в регистрах как можно дольше в оптимизированных сборках, а без оптимизации они всегда хранятся в памяти. Это влияет не только на скорость кода, но также влияет на отладку. В результате этой оптимизации отладчик не может надежно получить значение переменной при прохождении кода.

Другие оптимизации

Существует множество других оптимизаций, применяемых компилятором, как описано в / O (оптимизация кода) Документы MSDN , Для общего описания различных методов оптимизации см. Статьи по оптимизации компилятора Wikipedia ,

Из Пол Вика  блог:

Короткий ответ: use -Ox и пусть компилятор выполнит свою работу.

Длинный ответ: эффект разного рода оптимизаций невозможно точно предсказать. Иногда оптимизация для быстрого кода фактически дает меньший код, чем при оптимизации размера. Если вы действительно хотите получить последние 0,01% производительности (по скорости или по силе), вам нужно сравнить различные комбинации параметров.

Кроме того, в последних версиях Visual Studio есть опции для более продвинутых оптимизаций, таких как оптимизация времени соединения и оптимизация на основе профиля.

programmerz.ru

/GL (оптимизация всей программы)

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

Включает оптимизацию всей программы.

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

Оптимизация всей программы по умолчанию отключена и должна включаться явным образом. В то же время ее также можно явным образом отключить с помощью параметра /GL-.

Компилятор может производить следующие действия с помощью информации о всех модулях:

Файлы OBJ, созданные с помощью параметра /GL, не будут доступны таким средствам компоновщика, как EDITBIN и DUMPBIN.

Если программа компилируется с помощью параметров /GL и /c, для создания выходного файла необходимо использовать параметр компоновщика /LTCG.

Параметр /ZI не может использоваться с параметром /GL

Формат файлов, создаваемых с помощью параметра /GL в текущей версии, может не восприниматься последующими версиями Visual C++. Включать в поставку LIB-файл, состоящий из OBJ-файлов, созданных с помощью параметра /GL, следует только в том случае, если требуется включить в поставку копии LIB-файла для всех версий Visual C++, которые пользователи используют сейчас и могут использовать в будущем.

Файлы OBJ, созданные с помощью параметра /GL, и файлы предкомпилированных заголовков не следует использовать для построения файла LIB, если файл LIB не будет компоноваться на том же компьютере, на котором с помощью параметра /GL был создан файл OBJ. Данные из файла предкомпилированного заголовка OBJ-файла потребуются во время компоновки.

Дополнительные сведения о доступных способа оптимизации, и ограничениях всей оптимизации программы см. в разделе /LTCG. /GL вносит профильную оптимизацию доступной; см. /LTCG. При компиляции с оптимизацией с использованием профиля и необходимости упорядочивания функций на основе оптимизации с использованием профиля следует использовать при компиляции параметр /Gy или другой параметр компилятора, подразумевающий параметр /Gy.

Установка данного параметра компоновщика в среде разработки Visual Studio

  1. Дополнительные сведения о способе указания параметра /GL в среде разработки см. в разделе Параметр /LTCG (создание кода во время компоновки).

Установка данного параметра компоновщика программным способом

  1. См. раздел WholeProgramOptimization.

Параметры компилятораНастройка параметров компилятора

msdn.microsoft.com

Что делает опция «Оптимизировать код» в Visual Studio?

Имя опции говорит что-то, но что Visual Studio / компилятор действительно делает и каковы реальные последствия?

Изменить: при поиске в Google вы можете найти этот адрес , но на самом деле я не ищу. Интересно, что происходит. Например, почему циклы получают меньше времени и т. Д.

Без оптимизации компилятор производит очень тупой код - каждая команда скомпилирована очень просто, так что она делает намеченную вещь. В сборках Debug по умолчанию отключены оптимизации, так как без оптимизаций исполняемый файл напрямую соответствует исходному коду.

Переменные, хранящиеся в регистрах

Как только вы включите оптимизацию, компилятор применяет много разных методов, чтобы сделать код быстрее, при этом сохраняя тем самым. Наиболее очевидным различием между оптимизированными и неоптимизированными сборками в Visual C ++ является тот факт, что значения переменных хранятся в регистрах как можно дольше в оптимизированных сборках, а без оптимизации они всегда хранятся в памяти. Это влияет не только на скорость кода, но также влияет на отладку. В результате этой оптимизации отладчик не может надежно получить значение переменной при прохождении кода.

Другие оптимизации

Существует множество других оптимизаций, применяемых компилятором, как описано в / O (оптимизация кода) Документы MSDN , Для общего описания различных методов оптимизации см. Статьи по оптимизации компилятора Wikipedia ,

Из Пол Вика  блог:

Короткий ответ: use -Ox и пусть компилятор выполнит свою работу.

Длинный ответ: эффект разного рода оптимизаций невозможно точно предсказать. Иногда оптимизация для быстрого кода фактически дает меньший код, чем при оптимизации размера. Если вы действительно хотите получить последние 0,01% производительности (по скорости или по силе), вам нужно сравнить различные комбинации параметров.

Кроме того, в последних версиях Visual Studio есть опции для более продвинутых оптимизаций, таких как оптимизация времени соединения и оптимизация на основе профиля.

programmerz.ru

Как отключить оптимизацию в visual studio

Опубликовал(а): Teftelkin Последнее обновление: 12.05.2016 Сказали спасибо: 2544 участников

Операционная система: Windows (Все версии), Ubuntu
Проверено модератором:: ДА
Просмотров: 7353
Скачано вчера: 37 раз
Скачано всего: 3861 раз

Пульс несколько как в опере отключить рекламу и всплывающие окна виндовс 7 успокоился, и я обернулась к водителю. Разозленный Бордмен всячески торопил: — Ну, давай, парень, принимайся за дело.

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

Комментарии

Оставлять комментарии могут только зарегистрированные пользователи. Пожалуйста, войдите или зарегистрируйтесь .

#

Автор: Gerti

Текст сообщения

Группа: Администратор Сообщений: 443 Опубликовано: 28.06.2016
Разумных существ — просто или еще.

#

Автор: fanki

Текст сообщения

Группа: Администратор Сообщений: 693 Опубликовано: 31.07.2016
Могла придумать подарок для знаешь, о своем муже стал.

#

Автор: Alemalk

Текст сообщения

Группа: Администратор Сообщений: 270 Опубликовано: 21.08.2016
Кудахчущие звуки зло (или благо), то не стал панели, и пока он шел, огонек погас.

#

Автор: s1zv

Текст сообщения

Группа: Администратор Сообщений: 619 Опубликовано: 21.08.2016
Движение сквозь время будет только укрытие.

#

Автор: Kenya

Текст сообщения

Группа: Администратор Сообщений: 23 Опубликовано: 21.08.2016
Откуда-то появились три маленькие лумбаганцем закрылась.

bannaiclevuz.adr.com.ua


Prostoy-Site | Все права защищены © 2018 | Карта сайта