Share via


/Os, /Ot (Favorecer código pequeño, favorecer código rápido)

Las opciones del compilador /Os y /Ot especifican si se debe favorecer el tamaño (/Os) o la velocidad (/Ot) al optimizar el código.

Sintaxis

/Os
/Ot

Comentarios

/Os (Favor de código pequeño) minimiza el tamaño de los EXE y los archivos DLL al indicar al compilador que favorezca el tamaño con respecto a la velocidad. El compilador puede reducir muchas construcciones de C y C++ a secuencias funcionalmente similares del código de máquina. En ocasiones, estas diferencias ofrecen inconvenientes de tamaño frente a la velocidad. Las opciones /Os y /Ot permiten especificar una preferencia para una sobre la otra:

/Ot (Favor del código rápido) maximiza la velocidad de los EXE y los archivos DLL al indicar al compilador que favorece la velocidad con respecto al tamaño. /Ot es el valor predeterminado cuando se habilitan las optimizaciones. El compilador puede reducir muchas construcciones de C y C++ a secuencias funcionalmente similares del código de máquina. En ocasiones, estas diferencias ofrecen inconvenientes de tamaño frente a la velocidad. La opción /Ot está implícita en la opción /O2 (Maximizar velocidad). La opción /O2 combina varias opciones para generar un código más rápido.

Nota:

La información que se obtiene a partir de series de pruebas de generación de perfiles reemplaza las optimizaciones que, en caso contrario, estarían activas si se especificara /Ob, /Os o /Ot. Para más información, vea Optimizaciones guiadas por perfiles.

Ejemplo específico de x86

En el siguiente ejemplo se muestra la diferencia entre la opción /Os (Favor código pequeño) y la opción /Ot (Favor código rápido):

Nota:

En este ejemplo se describe el comportamiento esperado al usar /Os o /Ot. Sin embargo, el comportamiento del compilador de una nueva versión a otra puede dar lugar a diferentes optimizaciones para el código siguiente.

/* 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;
}

Como se muestra en el fragmento de código de máquina siguiente, cuando differ.c se compila para el tamaño (/Os), el compilador implementa la expresión de multiplicación en la instrucción return explícitamente como una multiplicación para producir una secuencia de código corta pero más lenta:

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

Como alternativa, cuando differ.c se compila para la velocidad (/Ot), el compilador implementa la expresión de multiplicación en la instrucción return como una serie de turnos e instrucciones LEA para generar una secuencia de código rápida pero más larga:

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

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.

  2. Seleccione en la página de propiedades Propiedades de configuración>C/C++>Optimización.

  3. Modifique la propiedad Favorecer tamaño o velocidad.

Para establecer esta opción del compilador mediante programación

Consulte también

Opciones de /O (Optimizar código)
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC