/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
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Выберите страницу свойств>конфигурации C/C++>Optimization.
Измените свойство Favor Size или Speed .
Установка данного параметра компилятора программным способом
- См. раздел FavorSizeOrSpeed.
См. также
Параметры /O (оптимизация кода)
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC