/LTCG (Generación de código en tiempo de vínculo)

Use /LTCG para realizar la optimización de todo el programa o para crear la instrumentación de optimización guiada por perfiles (PGO), realizar cursos y crear versiones optimizadas guiadas por perfiles.

Sintaxis

/LTCG[:{INCREMENTAL|NOSTATUS|STATUS|OFF}]

Estas opciones estarán en desuso en Visual Studio 2015:

/LTCG:{PGINSTRUMENT|PGOPTIMIZE|PGUPDATE}

Argumentos

INCREMENTAL
(Opcional) Especifica que el enlazador solo aplica toda la optimización de programa o la generación de código en tiempo de vínculo (LTCG) a los archivos a los que afecta una modificación, en lugar de a todo el proyecto. De forma predeterminada, esta marca no se establece cuando se especifica /LTCG y todo el proyecto está vinculado mediante el uso de la optimización de todo el programa.

NOSTATUS | STATUS
(Opcional) Especifica si el enlazador debe mostrar un indicador de progreso que indique qué porcentaje del vínculo está completado. De forma predeterminada, esta información de estado no se muestra.

OFF
(Opcional) Deshabilita la generación de código en tiempo de vínculo. El enlazador trata todos los módulos compilados con /GL como si estuvieran compilados sin esa opción, y los módulos de MSIL hacen que se produzca un error en el vínculo.

PGINSTRUMENT
(Opcional) Esta opción está en desuso a partir de Visual Studio 2015. Es preferible usar /LTCG y /GENPROFILE o /FASTGENPROFILE para generar una compilación instrumentada para la optimización guiada por perfiles. Los datos que se recopilan de las ejecuciones instrumentadas se usan para compilar una imagen optimizada. Para más información, vea Optimizaciones guiadas por perfiles. La forma abreviada de esta opción es /LTCG:PGI.

PGOPTIMIZE
(Opcional) Esta opción está en desuso a partir de Visual Studio 2015. En su lugar, use /LTCG y /USEPROFILE para compilar una imagen optimizada. Para más información, vea Optimizaciones guiadas por perfiles. La forma abreviada de esta opción es /LTCG:PGO.

PGUPDATE
(Opcional) Esta opción está en desuso a partir de Visual Studio 2015. En su lugar, use /LTCG y /USEPROFILE para recompilar una imagen optimizada. Para más información, vea Optimizaciones guiadas por perfiles. La forma abreviada de esta opción es /LTCG:PGU.

Comentarios

La opción /LTCG indica al enlazador que debe llamar al compilador y realizar la optimización de todo el programa. También es posible realizar una optimización guiada por perfiles. Para más información, vea Optimizaciones guiadas por perfiles.

Salvo en las siguientes excepciones, no es posible agregar opciones del enlazador a la combinación PGO de /LTCG y /USEPROFILE que no se especificaron en la combinación de inicialización PGO anterior de las opciones /LTCG y /GENPROFILE:

Las opciones del enlazador que se especifiquen junto con las opciones /LTCG y /GENPROFILE para inicializar la PGO no tienen que especificarse al compilar con /LTCG y /USEPROFILE, ya que están implícitas.

En el resto de este artículo se explica la generación de código en tiempo de vínculo realizada por /LTCG.

/LTCG está implícito en /GL.

El enlazador invoca la generación de código en tiempo de vínculo si se pasa un módulo que se ha compilado con /GL o un módulo MSIL (vea Archivos .netmodule como entrada del enlazador). Si no se especifica explícitamente /LTCG al pasar /GL o módulos MSIL al vinculador, el vinculador finalmente detecta esta situación y se reinicia el vínculo mediante el uso de /LTCG. Especifique explícitamente /LTCG al pasar /GL y módulos MSIL al enlazador para conseguir el rendimiento de compilación más rápido posible.

Para obtener un rendimiento más rápido, use /LTCG:INCREMENTAL. Esta opción indica al enlazador que debe volver a optimizar solo los archivos a los que haya afectado un cambio de archivo de origen, en lugar de todo el proyecto. Esta opción puede reducir considerablemente el tiempo de vínculo necesario. Está opción no se considera la misma opción que la vinculación incremental. Si quita la opción /LTCG:INCREMENTAL, quite también cualquier opción /LTCGOUT para mejorar los tiempos de compilación y el uso del disco.

/LTCG no es válido para su uso con /INCREMENTAL.

Cuando se usa /LTCG para vincular los módulos compilados mediante /Og, /O1, /O2 o /Ox, se realizan estas optimizaciones:

  • Inserción entre módulos

  • Asignación de registros entre procedimientos (solo los sistemas operativos de 64 bits)

  • Convención de llamada personalizada (solo x86)

  • Desplazamiento de TLS pequeño (solo x86)

  • Alineamiento doble de pila (solo x86)

  • Desambiguación de memoria mejorada (mejor información de interferencias para las variables globales y los parámetros de entrada)

Nota:

El vinculador determina las optimizaciones que se usaron para compilar cada función y aplica las mismas optimizaciones en tiempo de vinculación.

El uso de /LTCG y /O2 provoca una optimización de doble alineación.

Si se especifican /LTCG y /O1, no se realizará la doble alineación. Si la mayoría de las funciones de una aplicación se compila para conseguir velocidad, aunque algunas funciones se compilen por motivos de tamaño (por ejemplo, mediante el pragma optimize), el compilador alineará de forma doble las funciones que están optimizadas para el tamaño si llaman a funciones que necesitan una doble alineación.

Si el compilador puede identificar todos los sitios de llamada de una función, el compilador omite los modificadores de convención de llamada explícitos e intenta optimizar la convención de llamada de la función:

  • Se pasan parámetros en los registros

  • Se reordenan parámetros para la alineación

  • Se quitan parámetros sin utilizar

Si se llama a una función a través de un puntero de función, o si una función se llama desde fuera de un módulo que se compila con /GL, el compilador no intenta optimizar la convención de llamada de la función.

Nota:

Si usa /LTCG y vuelve a definir mainCRTStartup, la aplicación puede tener un comportamiento impredecible que relaciona el código de usuario que se ejecuta antes de que se inicialicen los objetos globales. Hay tres formas de solucionar este problema: no redefinir mainCRTStartup, no compilar el archivo que contiene mainCRTStartup mediante /LTCG o inicializar las variables globales y los objetos de forma estática.

Módulos /LTCG y MSIL

Los módulos que se compilan con /GL y /clr pueden usarse como entradas del vinculador cuando se especifica /LTCG.

  • /LTCG puede aceptar archivos objeto nativos y archivos objeto mixtos nativos/administrados (compilados mediante /clr). Las opciones del compilador /clr:pure y /clr:safe han quedado en desuso en Visual Studio 2015 y no se admiten en Visual Studio 2017 y versiones posteriores.

  • /LTCG:PGI no acepta módulos nativos compilados mediante /GL y /clr

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

La propiedad optimización del programa Quién le establece varias opciones del compilador y del enlazador, incluido /LTCG. Se recomienda usar esta propiedad para cambiar la configuración de toda una configuración de compilación. Para establecer la optimización del programa Quién le para el proyecto:

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento de las propiedades del compilador y la compilación.

  2. Seleccione la página de propiedades Propiedades de configuración>General.

  3. Modifique la propiedad Optimización de todo el programa . Haga clic en Aceptar o en Aplicar para guardar los cambios.

También puede aplicar /LTCG a compilaciones concretas si elige Compilar>Optimización guiada por perfiles en la barra de menús, o si selecciona una de las opciones de Optimización guiada por perfiles del menú contextual del proyecto.

Para habilitar la generación de código de tiempo de vínculo por separado o establecer una opción específica de generación de código de tiempo de vínculo:

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto.

  2. Seleccione la página de propiedades Propiedades de configuración>Enlazador>Optimización.

  3. Modifique la propiedad Link Time Code Generation a una de las siguientes opciones:

    • Valor predeterminado
    • Uso de la generación de código de tiempo de vínculo rápido (LTCG:incremental)
    • Usar generación de código de tiempo de vínculo (LTCG)
    • Optimización guiada por perfiles - Instrumento (LTCG:PGInstrument)
    • Optimización guiada por perfiles: optimización (LTCG:PGOptimize)
    • Optimización guiada por perfiles: actualización (LTCG:PGUpdate)
  4. Haga clic en Aceptar o en Aplicar para guardar los cambios.

Para especificar si el enlazador muestra un indicador de progreso para la generación de código de tiempo de vínculo:

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto.

  2. Seleccione la página de propiedades Propiedades de configuración>Enlazador>General.

  3. Modifique la propiedad Estado del vínculo. Haga clic en Aceptar o en Aplicar para guardar los cambios.

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

Consulte también

Referencia del enlazador MSVC
Opciones del enlazador MSVC