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


/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

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

  2. Откроите папку C/C++.

  3. Перейдите на страницу свойств Оптимизация.

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

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

См. также

Ссылки

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

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

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