/LTCG (Generación de código en tiempo de enlace)
/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]
Comentarios
donde:
:NOSTATUS | :STATUS (opcional)
Especifica si el vinculador debe mostrar un indicador de progreso para reflejar qué porcentaje del vínculo se ha completado. De forma predeterminada no se muestra esta información de estado.:PGINSTRUMENT (opcional)
Especifica que el vinculador debería generar un archivo .pgd en preparación para las ejecuciones de prueba instrumentadas en la aplicación. Opcionalmente, puede especificar /PGD para crear el archivo .pgd con un nombre o una ubicación no predeterminados.Los datos recogidos en las ejecuciones instrumentadas se utilizarán para crear una imagen optimizada. Para obtener más información, vea Optimización guiada por perfiles (PGO). La forma abreviada de esta opción es /LTCG:PGI.
:PGOPTIMIZE (opcional)
Especifica que el vinculador debería utilizar los datos de perfil creados después de ejecutar el binario instrumentado para crear una imagen optimizada. Todos los archivos de entrada deben ser idénticos a los archivos que se especificaron con /LTCG:PGI. Para obtener más información, vea Optimización guiada por perfiles (PGO). La forma abreviada de esta opción es /LTCG:PGO.:PGUPDATE (opcional)
Permite agregar o modificar una lista de archivos de entrada a partir de lo que se especificó en la fase de :PGINSTRUMENT. No obstante, los archivos de entrada nuevos no se optimizarán con optimizaciones guiadas por perfiles, y las partes cambiadas de un archivo de entrada modificado que invaliden datos de perfil recogidos durante la fase de instrumentación para ese código no se optimizarán con optimizaciones guiadas por perfiles. Para obtener más información, vea Optimización guiada por perfiles (PGO). La forma abreviada de esta opción es /LTCG:PGU.
Comentarios
La opción /LTCG le indica al vinculador que llame al compilador y ejecute una optimización completa del programa. También puede realizar una optimización guiada por perfiles. Para obtener más información, vea Optimización guiada por perfiles (PGO).
Con las excepciones siguientes, no se pueden agregar opciones del vinculador adicionales a la ejecución de /LTCG:PGOPTIMIZE o /LTCG:PGUPDATE si no se especificaron en la ejecución de /LTCG:PGINSTRUMENT:
Las opciones del vinculador especificadas para /LTCG:PGINSTRUMENT no tienen por qué especificarse para /LTCG:PGOPTIMIZE; ya que están implícitas.
El resto de este tema sólo tratará de /LTCG en lo que se refiere a la generación de código en tiempo de vínculo.
La opción /LTCG estará implícita si se usa /GL.
El vinculador invoca la generación de código en tiempo de vínculo si se le pasa un módulo que se haya compilado con /GL o un módulo MSIL (vea .Archivos netmodule como entrada del vinculador para obtener más información). Si no se especifica explícitamente /LTCG al pasar módulos /GL o MSIL al vinculador, el vinculador podrá detectarlo y reiniciar el vínculo con /LTCG. Especifique explícitamente /LTCG al pasar módulos /GL y MSIL al vinculador para optimizar el rendimiento de la generación.
La opción /LTCG no podrá utilizarse con /INCREMENTAL.
Si /LTCG se utiliza con /Og, /O1, /O2 o /Ox, se llevarán a cabo las siguientes optimizaciones:
Procesamiento en línea entre módulos
Asignación de registros entre procedimientos (sólo en sistemas operativos de 64 bits)
Convenciones de llamada personalizadas (sólo x86)
Pequeños desplazamientos de TLS (sólo x86)
Alineación doble de pila (sólo x86)
Mejora en la anulación de ambigüedades en la memoria (mejor información de interferencias para las variables globales y los parámetros de entrada)
El uso de /LTCG y /Ogt causará una optimización de doble alineación.
Si se especifican /LTCG y /Ogs, no se realizará la doble alineación. Si se compilan la mayoría de las funciones de una aplicación para aumentar la velocidad, y algunas funciones se compilan para reducir el tamaño (por ejemplo, mediante el uso del pragma optimize), el compilador duplicará la alineación de las funciones optimizadas en cuanto al tamaño en caso de que llamen a funciones que necesiten doble alineación.
Si el compilador puede identificar todos los sitios de llamada de una función, omitirá los modificadores de convención de llamada explícitos correspondientes a la función y tratará de optimizar la convención de llamada de la función:
pase los parámetros en registros
reordene los parámetros para alineación
quite los parámetros no usados
Si se llama a una función mediante un puntero a función, o si se puede llamar a una función desde fuera de un módulo compilado con /GL, el compilador no intentará optimizar la convención de llamada de la función.
Nota
Si se utiliza /LTCG y se vuelve a definir mainCRTStartup, la aplicación puede tener un comportamiento imprevisible en cuanto al código de usuario que se ejecuta antes de que se inicialicen los objetos globales. Hay tres formas de afrontar este problema: no redefinir mainCRTStartup, no compilar el archivo que contiene mainCRTStartup con /LTCG, o inicializar las variables y los objetos globales estadísticamente, si es posible.
Módulos /LTCG y MSIL
Los módulos compilados con /GL y /clr se pueden utilizar como entrada al vinculador cuando se especifica /LTCG:
/LTCG puede aceptar archivos de objetos nativos; archivos de objetos nativos/administrados mixtos (compilados con /clr), archivos de objetos puros (compilados con /clr:pure), y archivos de objetos seguros (compilados con /clr:safe).
/LTCG puede aceptar archivos .netmodule seguros, que se pueden crear con /clr:safe /LN en Visual C++ y /target:module con cualquier otro compilador de Visual Studio. . /LTCG no acepta archivos .netmodule generados con /clr o /clr:pure.
/LTCG:PGI no acepta módulos nativos compilados con /GL y /clr o módulos puros (generados con /clr:pure).
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 Modificar la configuración del proyecto.
Haga clic en la carpeta Propiedades de configuración.
Haga clic en la página de propiedades General.
Modifique la propiedad Optimización de todo el programa.
También puede aplicar /LTCG para especificar generaciones eligiendo Optimización guiada por perfiles (PGO) en el menú Generar, o haciendo clic con el botón secundario en el nombre del proyecto en el Explorador de soluciones y seleccionando una de las opciones de optimización guiada por perfiles.