/Os, /Ot (приоритет размера кода или скорости кода)
Эти параметры минимизируют или максимизируют размеры исполняемых файлов (EXE-файлов) и библиотек DLL.
/Os
/Ot
Заметки
Параметр /Os (предпочитать краткость кода) минимизирует размер EXE-файлов и библиотек DLL, указывая компилятору предпочесть краткость кода его скорости.Компилятор может сократить многие конструкции C и C++, преобразовав их в аналогичные по функциональности последовательности машинного кода.Иногда различия между ними предлагают выбор между краткостью или скоростью.Параметры /Os и /Ot позволяют указать то или иное предпочтение.
Параметр /Ot (предпочитать скорость кода) максимизирует скорость EXE-файлов и библиотек DLL, указывая компилятору предпочесть скорость кода его краткости(это установка по умолчанию). Компилятор может сократить многие конструкции C и C++, преобразовав их в аналогичные по функциональности последовательности машинного кода.Иногда различия между ними предлагают выбор между краткостью или скоростью.Параметр /Ot подразумевается параметром "Максимальная скорость" (/O2).Параметр /O2 объединяет несколько возможностей по созданию очень быстрого кода.
При использовании параметра /Os или /Ot следует также указывать параметр /Og для оптимизации кода.
Примечание |
---|
Сведения, собранные из тестовых запусков профилирования, переопределяют оптимизации, которые в противном случае были бы задействованы в случае указания /Ob, /Os или /Ot.Дополнительные сведения см. в разделе Профильная оптимизация. |
Специфика для платформы 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) компилятор реализует выражение умножения в операторе "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
Откройте диалоговое окно Страницы свойств проекта.Дополнительные сведения см. в разделе Открытие свойств страниц проекта.
Откройте папку C/C++.
Перейдите на страницу свойств Оптимизация.
Измените значение свойства Предпочитать размер или скорость.
Установка данного параметра компилятора программным способом
- Дополнительные сведения см. в разделе FavorSizeOrSpeed.