В VC ++, что является эквивалентом параметра #pragma компилятора / O2 (оптимизировать по скорости) - PullRequest
3 голосов
/ 23 сентября 2010

Согласно msdn ,

/ O2 (максимальная скорость)

эквивалентно

/Og / Oi / Ot / Oy / Ob2 / Gs / GF / Gy

и согласно msdn снова, следующая прагма

# прагмаoptimize ("[оптимизация-список]", {вкл. / выкл.))

использует те же буквы в своем "списке оптимизации", что и опция компилятора / O.Доступные буквы для прагмы:

  • g - Включить глобальные оптимизации.
  • p - Улучшение согласованности с плавающей точкой.
  • s или t - Укажите короткие или быстрые последовательности машинного кода.
  • y - Создание указателей фреймов в стеке программ.

Какие из них следует использовать, чтобы иметь то же значение, что и / O2?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

В статье Microsoft Docs / O1, / O2 (минимизировать размер, максимизировать скорость) говорит для Visual Studio 2017:

Параметры компилятора / O1 и / O2 - это быстрый способ установить несколько конкретные варианты оптимизации сразу. Параметр / O1 устанавливает отдельные варианты оптимизации, которые создают наименьший код в большинство случаев. Параметр / O2 устанавливает параметры, которые создают самый быстрый код в большинстве случаев. Параметр / O2 используется по умолчанию для релизных сборок. Эта таблица показывает конкретные параметры, которые установлены / O1 и / O2:

Option                   Equivalent to
/O1 (Minimize Size)     /Og /Os /Oy /Ob2 /GF /Gy
/O2 (Maximize Speed)    /Og /Oi /Ot /Oy /Ob2 /GF /Gy

Из статьи Microsoft Docs Параметры O / (Оптимизировать код) :

  1. /Og включает глобальную оптимизацию
  2. /Oi генерирует встроенные функции для соответствующих вызовов функций.
  3. /Ot (настройка по умолчанию) указывает компилятору предпочесть оптимизацию скорости по сравнению с оптимизацией по размеру.
  4. /Oy подавляет создание указателей кадров в стеке вызовов для более быстрых вызовов функций.
  5. /Ob2 расширяет функции, помеченные как inline или __inline и любые другие функции, выбранные компилятором

Опции / G:

  1. /GF (исключить повторяющиеся строки)
  2. /Gy (Включить связывание на уровне функций)

Опции /G не являются строго оптимизацией, поэтому у нас остаются /Og и /Ot, плюс #pragma intrinsic (для элемента 2 в списке), #pragma auto_inline (для элемента 5 в списке ) и, возможно, #pragma inline_depth. См. Статья в Microsoft Docs Прагмы по оптимизации и ключевые слова

См. Также Статья в Microsoft Docs / Ox (Включить большинство оптимизаций скорости) , которая указывает, что опция /Ox аналогична опции /O2, за исключением того, что она не включает /GF и /Gy. См. Также В чем разница между параметрами компилятора / Ox и / O2?

В статье Microsoft Docs Параметры компилятора, перечисленные по категориям , содержит список параметров компилятора со ссылками на их значения.

0 голосов
/ 16 октября 2013

Я не думаю, что есть прямой эквивалент.

# pragma optimize ("gty", off)

Следует отменить для файла большую часть эффекта / O2 на уровне проекта, но

# pragma optimize ("gty", on)

Просто говорит "используйте переключатель компилятора", поэтому вам нужно / O2 или / Og / Ot /Oy.

Я не могу найти прагмы для частей / G, и они выполняют оптимизацию "как".

...