Поделиться через


/Os, /Ot (приоритет размера кода или скорости кода)

Обновлен: Ноябрь 2007

Эти параметры минимизируют или максимизируют размеры исполняемых файлов (EXE-файлов) и библиотек DLL.

 /Os /Ot

Заметки

Параметр /Os (предпочитать краткость кода) минимизирует размер EXE-файлов и библиотек DLL, указывая компилятору предпочесть краткость кода его скорости. Компилятор может сократить многие конструкции C и C++, преобразовав их в аналогичные по функциональности последовательности машинного кода. Иногда различия между ними предлагают выбор между краткостью или скоростью. Параметры /Os и /Ot позволяют указать то или иное предпочтение.

Параметр /Ot (предпочитать скорость кода) максимизирует скорость EXE-файлов и библиотек DLL, указывая компилятору предпочесть скорость кода его краткости (это установка по умолчанию). Компилятор может сократить многие конструкции C и C++, преобразовав их в аналогичные по функциональности последовательности машинного кода. Иногда различия между ними предлагают выбор между краткостью или скоростью. Параметр /Ot подразумевается параметром "Максимальная скорость" (/O2/O1, /O2 (минимизировать размер, максимизировать скорость)). Параметр /O2 объединяет несколько возможностей по созданию очень быстрого кода.

При использовании параметра /Os или /Ot следует также указывать параметр /Og/Og (Виды глобальной оптимизации) для оптимизации кода.

f9534wye.alert_note(ru-ru,VS.90).gifПримечание.

Информация, собранная в ходе тестовых запусков профилирования, имеет приоритет над методами оптимизации, которые в противном случае были бы задействованы в случае указания параметра /Ob, /Os или /Ot. Дополнительные сведения см. в разделе Профильная оптимизация.

Специфика платформы x86

В следующем примере кода демонстрируется разница между параметром предпочтения краткого кода (/Os) и параметром предпочтения быстрого кода (/Ot).

f9534wye.alert_note(ru-ru,VS.90).gifПримечание.

В этом примере описывается ожидаемое поведение при использовании параметров /Os и /Ot. Однако в зависимости от выпуска компилятор может создавать разные оптимизации для кода примера.

/* differ.c
  This program implements a multiplication operator
  Compile with /Os to implement multiply explicitly as multiply.
  Compile with /Ot to implement as a series of shift and LEA instructions.
*/
int differ(int x)
{
    return x * 71;
}

Как показано в следующем фрагменте машинного кода, при компиляции файла DIFFER.c предпочтением краткости кода (параметр /Os) компилятор реализует выражение умножения в операторе "return" явно, как умножение, для создания краткой, но более медленной последовательности кода:

   mov    eax, DWORD PTR _x$[ebp]
   imul   eax, 71                  ; 00000047H

С другой стороны, при компиляции файла DIFFER.c с предпочтением скорости кода (параметр /Ot) компилятор применяет выражение умножения в операторе "return" в виде серии инструкций смещения и LEA, чтобы создать быструю, но более длинную последовательность кода:

   mov    eax, DWORD PTR _x$[ebp]
   mov    ecx, eax
   shl    eax, 3
   lea    eax, DWORD PTR [eax+eax*8]
   sub    eax, ecx

Специфика платформы x86 — окончание

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

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Щелкните папку C/C++.

  3. Щелкните страницу свойств Оптимизация.

  4. Измените значение свойства Предпочитать размер или скорость.

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

См. также

Ссылки

Параметры /O (оптимизация кода)

Параметры компилятора

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