/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
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.
Haga clic en la carpeta C/C++.
Haga clic en la página de propiedades Optimización.
Modifique la propiedad Tamaño o velocidad.
Para establecer esta opción del compilador mediante programación
- Vea FavorSizeOrSpeed.