/OPT (Optimizaciones)

Controla las optimizaciones que efectúa LINK durante una compilación.

Sintaxis

/OPT:{REF | NOREF}
/OPT:{ICF[=iteraciones] | NOICF}
/OPT:{LBR | NOLBR}

Argumentos

REF | NOREF

/OPT:REF elimina las funciones y los datos a los que nunca se hace referencia; mientras que /OPT:NOREF los mantiene.

Cuando /OpT:REF está habilitado, LINK quita los datos y funciones empaquetados que no tienen referencias, conocidos COMDAT. Esta optimización se conoce como eliminación transitiva de COMDAT. La opción /OPT:REF también deshabilita la vinculación incremental.

Tanto las funciones insertadas como las funciones miembro definidas dentro de una declaración de clase siempre son COMDAT. Todas las funciones de un archivo objeto se convierten en COMDAT si se compila mediante la opción /Gy. Para colocar const datos en COMDAT, debe declararlos mediante __declspec(selectany). Para obtener información sobre cómo especificar los datos para que se eliminen o se plieguen, vea selectany.

De forma predeterminada, /OPT:REF está habilitado por el enlazador, a menos que se especifiquen /OPT:NOREF o /DEBUG. Para reemplazar este valor predeterminado y mantener las funciones COMDAT sin referencias en el programa, especifique /OPT:NOREF. Puede usar la opción /INCLUDE para reemplazar la eliminación de un símbolo concreto.

Si se especifica /DEBUG, el valor predeterminado de /OPT es NOREF y se conservan todas las funciones en la imagen. Para reemplazar este valor predeterminado y optimizar una compilación de depuración, especifique /OPT:REF. Esto puede reducir el tamaño del archivo ejecutable y puede ser una optimización útil, incluso en compilaciones de depuración. Se recomienda especificar también /OPT:NOICF para conservar funciones idénticas en compilaciones de depuración. De este modo, resulta más fácil consultar los seguimiento de pila y establecer puntos de interrupción en las funciones que, de otro modo, estarían contraídas.

ICF[=iteraciones] | NOICF

Use ICF[=iteraciones] para realizar un plegado idéntico de COMDAT. Las funciones COMDAT redundantes se pueden quitar de la salida del vinculador. El parámetro opcional iterations especifica el número de veces que se recorren los símbolos en busca de duplicados. El número predeterminado de iteraciones es 1. En iteraciones adicionales es posible localizar más duplicados que no se han cubierto mediante el plegamiento de las iteraciones anteriores.

De forma predeterminada, el enlazador habilita /OPT:REF, a menos que se especifiquen /OPT:NOREF o /DEBUG. Para invalidar este valor predeterminado e impedir que se plieguen los COMDAT en el programa, especifique /OPT:NOICF.

En una compilación de depuración, debe especificarse explícitamente /OPT:ICF para habilitar el plegamiento de COMDAT. Sin embargo, como /OPT:ICF puede combinar funciones o datos idénticos, puede cambiar los nombres de función que aparecen en los seguimientos de la pila. También puede resultar imposible establecer puntos de interrupción en algunas funciones o examinar algunos datos en el depurador, y podría mostrarle funciones inesperadas al recorrer el código paso a paso. El comportamiento del código es idéntico, pero la presentación del depurador puede resultar muy confusa. Por consiguiente, no se recomienda usar /OPT:ICF en las compilaciones de depuración, salvo que las ventajas de tener un código más pequeño compensen estas desventajas.

Nota:

Dado que /OPT:ICF puede originar la misma dirección que se va a asignar a diversas funciones o miembros de datos de solo lectura (es decir, variables const cuando se compilan mediante /Gy), puede interrumpir un programa que dependa de direcciones únicas de funciones o miembros de datos de solo lectura. Para obtener más información, consulte /Gy (Habilitar vinculación en el nivel de función).

LBR | NOLBR

Las opciones /OPT:LBR y /OPT:NOLBR solo se aplican a los archivos binarios de ARM. Dado que algunas instrucciones de la rana del procesador de ARM tienen un intervalo limitado, si el enlazador detecta un salto a una dirección fuera del intervalo, reemplaza la dirección de destino de la instrucción de bifurcación por la dirección de una "isla" de código que contiene una instrucción de bifurcación que apunta al destino real. Puede usar /OPT:LBR para optimizar la detección de instrucciones de bifurcación largas y la ubicación de islas de código intermedio para minimizar el tamaño total del código. /OPT:NOLBR indica al vinculador que genere islas de código para las instrucciones de bifurcación largas tal como se encuentren, sin optimización.

De forma predeterminada, la opción /OPT:LBR se establece cuando la vinculación incremental no está habilitada. Si desea usar un vínculo no incremental, pero no desea realizar optimizaciones de rama largas, especifique /OPT:NOLBR. La opción /OPT:LBR deshabilita la vinculación incremental.

Comentarios

Cuando se usa en la línea de comandos, el enlazador tiene como valor predeterminado /OPT:REF,ICF,LBR. Si se especifica /DEBUG, el valor predeterminado es /OPT:NOREF,NOICF,NOLBR.

Las optimizaciones de /OPT habitualmente reducen el tamaño de la imagen y aumentan la velocidad del programa. Estas mejoras pueden ser considerables en programas grandes, por lo que están habilitadas de forma predeterminada en compilaciones comerciales.

La optimización del enlazador tarda más tiempo de antemano, pero el código optimizado también ahorra tiempo cuando el enlazador tiene menos reubicaciones para corregir y crea una imagen final más pequeña, y ahorra aún más tiempo cuando tiene menos información de depuración para procesar y escribir en la PDB. Cuando la optimización está habilitada, puede dar lugar a un menor tiempo de vínculo global, ya que el pequeño costo adicional del análisis puede ser mayor que el ahorro de tiempo en los pasos del enlazador supera los archivos binarios más pequeños.

Los argumentos de /OPT se pueden especificar juntos, separados por comas. Por ejemplo, en lugar de /OPT:REF /OPT:NOICF, puede especificar /OPT:REF,NOICF.

Puede utilizar la opción de enlazador /VERBOSE para ver las funciones que /OPT:REF quita y las funciones que se han plegado mediante /OPT:ICF.

Los argumentos de /OPT a menudo se establecen para los proyectos creados mediante el cuadro de diálogo Nuevo proyecto del entorno de desarrollo integrado de Visual Studio y normalmente tienen valores diferentes para las configuraciones de depuración y de publicación. Si no se establece ningún valor para estas opciones del enlazador en el proyecto, puede obtener los valores predeterminados del proyecto, que pueden que no sean los mismos que los valores predeterminados que usa el enlazador en la línea de comandos.

Para establecer la opción del vinculador OPT:ICF u OPT:REF 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 la página de propiedades Propiedades de configuración>Enlazador>Optimización.

  3. Modifique una de estas propiedades:

    • Habilitación del plegado COMDAT

    • Referencias

Para establecer la opción del vinculador OPT:LBR 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 la página de propiedades Propiedades de configuración>Enlazador>Línea de comandos.

  3. Escriba la opción en Opciones adicionales:

    /opt:lbr o /opt:nolbr

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

Consulte también