/OPT (Optimizaciones)
Controla las optimizaciones que efectúa LINK durante una compilación.
/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
Argumentos
REF | NOREF
/OPT:REF elimina las funciones y los datos a los que nunca se hace referencia, mientras que /OPT:NOREF mantiene funciones y datos a los que nunca se hace referencia.LINK, de forma predeterminada, quita las funciones empaquetadas sin referencias.Un objeto contendrá funciones empaquetadas (COMDAT) siempre que haya sido compilado con la opción /Gy.A esta optimización se la denomina eliminación transitiva de COMDAT.Para reemplazar este valor predeterminado y mantener en el programa las COMDAT sin referencias, se deberá especificar /OPT:NOREF.Se puede usar la opción /INCLUDE para reemplazar la eliminación de un símbolo concreto.
Si se especifica /DEBUG, el valor predeterminado para /OPT es NOREF (en otro caso, es REF) y todas las funciones se preservan en la imagen.Para reemplazar este valor predeterminado y optimizar una compilación de depuración, especifique /OPT:REF.La opción /OPT:REF deshabilita la vinculación incremental.
Se deberán marcar los datos explícitamente como funciones COMDAT; para ello se utilizará __declspec(selectany).
Si se especifica /OPT:REF, /OPT:ICF está activado de manera predeterminada.Si quiere activar /OPT:REF pero no /OPT:ICF, debe especificar lo siguiente:
link /opt:ref /opt:noicf
La especificación de /OPT:ICF no activa la opción /OPT:REF.
ICF[= iterations**] | NOICF**
Utilice /OPT:ICF[=iterations] para realizar un plegamiento idéntico de COMDAT.Las funciones COMDAT redundantes se pueden quitar de la salida del vinculador.iterations especifica el número de veces que se recorren los símbolos en busca de duplicados.el valor predeterminado para ello será dos.En iteraciones adicionales es posible localizar más duplicados descubiertos mediante el plegamiento de las iteraciones anteriores.Tenga en cuenta que existe una diferencia en el comportamiento del vinculador cuando ICF está en vigor de forma predeterminada con /OPT:REF especificado explícitamente y cuando se especifica explícitamente /OPT:REF,ICF.La opción predeterminada de ICF con /OPT:REF no pliega datos de sólo lectura.Esto incluye todos los .rdata, .pdata y .xdata.Sin embargo, la opción predeterminada de ICF con /OPT:REF origina menos funciones plegadas al producir imágenes para Itanium y x64, ya que las funciones de estos módulos presentan más dependencia de datos de sólo lectura, tales como .pdata y .xdata.Para obtener ICF completo, especifique explícitamente /OPT:ICF.
Las funciones se sitúan en COMDAT con la opción del compilador /Gy; en las COMDAT, a su vez, se incluyen datos const.Vea selectany para obtener un ejemplo de cómo especificar datos de plegamiento.
ICF está activado de forma predeterminada si REF lo está, y es necesario que esté activado explícitamente en una versión de depuración.Es posible especificar NOICF si REF está especificado.
[!NOTA]
/OPT:ICF puede provocar que se asigne la misma dirección a funciones o miembros de datos sólo lectura diferentes (variables const compiladas con /Gy).Así pues, /OPT:ICF puede interrumpir un programa que dependa de que la dirección de funciones o miembros de datos de sólo lectura sea diferente.Para obtener más información, consulte /Gy (Habilitar vinculación en el nivel de función).
Comentarios
Las optimizaciones normalmente disminuyen el tamaño de la imagen y aumentan la velocidad del programa, a costa de un incremento del tiempo de vinculación.
Puede utilizar la opción /VERBOSE para ver las funciones que se han quitado mediante /OPT:REF y las funciones que se han plegado mediante /OPT:ICF.
Para establecer esta opción del vinculador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto.Para obtener más información, vea Establecer las propiedades de un proyecto de Visual C++
Haga clic en la carpeta Vinculador.
Haga clic en la página de propiedades Optimización.
Modifique una de las propiedades siguientes:
Habilitar plegamiento de COMDAT
Optimizar para Windows 98
Referencias
Para establecer esta opción del vinculador mediante programación
- Vea las propiedades EnableCOMDATFolding y OptimizeReferences.