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


/Os, /Ot (благоприястить к небольшому коду, благоприястить к быстрому коду)

Параметры /Os компилятора /Ot указывают, следует ли использовать размер (/Os) или скорость (/Ot) при оптимизации кода.

Синтаксис

/Os
/Ot

Замечания

/Os (В пользу небольшого кода) минимизирует размер EXEs и БИБЛИОТЕК DLL путем указания компилятору использовать размер по скорости. Компилятор может уменьшить количество конструкций C и C++ до функционально похожих последовательностей машинного кода. Иногда эти различия предлагают компромиссы по размеру и скорости. Параметры /Os и /Ot позволяют указать предпочтения для одного из них:

/Ot (Favor Fast Code) повышает скорость EXEs и БИБЛИОТЕК DLL путем указания компилятору использовать скорость по размеру. /Ot — это значение по умолчанию при включении оптимизации. Компилятор может уменьшить количество конструкций C и C++ до функционально похожих последовательностей машинного кода. Иногда эти различия предлагают компромиссы по размеру и скорости. Параметр /Ot подразумевается параметром /O2 (Максимальная скорость). Этот /O2 параметр объединяет несколько вариантов для ускорения создания кода.

Примечание.

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

Пример x86-конкретных

В следующем примере кода показано различие между параметром (предпочитать небольшой код) и параметром /Os /Ot (Предпочитать быстрый код):

Примечание.

В этом примере описывается ожидаемое поведение при использовании /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), компилятор реализует умножение в операторе возврата явным образом в виде умножения, чтобы создать короткую, но медленную последовательность кода:

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

Кроме того, когда differ.c компилятор компилируется для скорости (/Ot), компилятор реализует умножение выражения в операторе возврата в виде ряда сдвигов и LEA инструкций для создания быстрой, но более длинной последовательности кода:

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

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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Выберите страницу свойств>конфигурации C/C++>Optimization.

  3. Измените свойство Favor Size или Speed .

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

См. также

Параметры /O (оптимизация кода)
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC