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

Minimiza o maximiza el tamaño de archivos EXE y DLL.

/Os
/Ot

Comentarios

/Os (favorecer código pequeño) reduce al mínimo el tamaño de los archivos ejecutables y DLL al ordenar al compilador que dé prioridad al tamaño sobre la velocidad. El compilador puede reducir numerosas construcciones de C y C++ a secuencias funcionalmente similares al código máquina. En ocasiones, estas diferencias ofrecen contrapartidas de tamaño con respecto a la velocidad. Las opciones /Os y /Ot permiten especificar la preferencia de una sobre la otra:

/Ot (favorecer código rápido) eleva al máximo la velocidad de los archivos EXE y DLL, al ordenar al compilador que dé prioridad a la velocidad sobre el tamaño. Ésta es la opción predeterminada. El compilador puede reducir numerosas construcciones de C y C++ a secuencias funcionalmente similares al código máquina. En ocasiones, estas diferencias ofrecen contrapartidas de tamaño con respecto a la velocidad. La opción /Ot está implícita en la opción Maximizar velocidad (/O2). La opción /O2 combina varias opciones para generar un código muy rápido.

Si utiliza /Os o /Ot, también debe especificar /Og para optimizar el código.

Nota

La información que se recopila a partir de la generación de perfiles de las ejecuciones de prueba reemplazará las optimizaciones que, en caso contrario, estarían activas si se especifica /Ob, /Os o /Ot. Para obtener más información, vea Optimizaciones guiadas por perfiles.

Específico de x86

El código del ejemplo siguiente muestra la diferencia entre las opciones Favorecer código pequeño (/Os) y la opción Favorecer código rápido (/Ot):

Nota

A continuación, se describe el comportamiento esperado al utilizar /Os u /Ot. No obstante, el comportamiento del compilador puede variar de una versión a otra y producir diferentes optimizaciones del código.

/* 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 del equipo inferior, si DIFFER.c se compila con prioridad del tamaño (/Os), el compilador implementa la expresión de multiplicación en la instrucción return de forma explícita como una multiplicación para generar una secuencia de código corta, pero más lenta:

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

Pero si DIFFER.c se compila con prioridad de la velocidad (/Ot), el compilador implementa la expresión de multiplicación en la instrucción return como una serie de instrucciones shift y 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

Específico de END x86

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 obtener información detallada, vea Cómo: Abrir páginas de propiedades del proyecto.

  2. Haga clic en la carpeta C/C++.

  3. Haga clic en la página de propiedades Optimización.

  4. Modifique la propiedad Tamaño o velocidad.

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

Vea también

Referencia

/O (Opciones) (Optimizar código)

Opciones del compilador

Establecer las opciones del compilador