/LTCG (Génération de code durant l'édition de liens)
/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]
Notes
où :
:NOSTATUS | :STATUS (facultatif)
spécifie si l'éditeur de liens doit afficher un indicateur de progression montrant quel pourcentage du lien est terminé. Ces informations d'état ne sont pas affichées par défaut.:PGINSTRUMENT (facultatif)
Spécifie que l'éditeur de liens doit fournir un fichier .pgd en vue des séries de tests instrumentés sur l'application. Vous pouvez éventuellement spécifier /PGD pour créer le fichier .pgd avec un nom ou un emplacement autres que ceux par défaut.Les données recueillies à partir des exécutions instrumentées seront utilisées pour créer une image optimisée. Pour plus d'informations, consultez Optimisation guidée par profil. La forme abrégée de cette option est /LTCG:PGI.
:PGOPTIMIZE (facultatif)
Spécifie que l'éditeur de liens doit utiliser les données de profil créées après l'exécution du fichier binaire instrumenté pour générer une image optimisée. Tous les fichiers d'entrée doivent être identiques aux fichiers spécifiés avec /LTCG:PGI. Pour plus d'informations, consultez Optimisation guidée par profil. La forme abrégée de cette option est /LTCG:PGO.:PGUPDATE (facultatif)
Autorise l'ajout ou la modification de la liste des fichiers d'entrée par rapport à ce qui était spécifié dans la phase :PGINSTRUMENT. Toutefois, tout nouveau fichier d'entrée ne sera pas optimisé avec optimisations guidées par profil et les parties modifiées d'un fichier d'entrée qui rendent non valides les données de profil recueillies pendant la phase d'instrumentation de ce code ne seront pas optimisées avec les optimisations guidées par profil. Pour plus d'informations, consultez Optimisation guidée par profil. La forme abrégée de cette option est /LTCG:PGU.
Notes
L'option /LTCG indique à l'éditeur de liens d'appeler le compilateur et d'effectuer une optimisation de l'ensemble du programme. Vous pouvez également procéder à l'optimisation guidée par profil. Pour plus d'informations, consultez Optimisation guidée par profil.
Avec les exceptions suivantes, vous ne pouvez pas ajouter à l'exécution de /LTCG:PGOPTIMIZE ou de /LTCG:PGUPDATE d'options de l'éditeur de liens autres que celles qui sont spécifiées lors de l'exécution de /LTCG:PGINSTRUMENT :
Toutes options de l'éditeur de liens spécifiées pour /LTCG:PGINSTRUMENT ne doivent pas être spécifiées pour /LTCG:PGOPTIMIZE ; elles sont implicites.
Le reste de cette rubrique décrit /LTCG uniquement en termes de génération du code au moment de la liaison.
L'option /LTCG va de pair avec l'option /GL.
L'éditeur de liens appelle la génération du code au moment de la liaison si un module compilé avec /GL ou un module MSIL (consultez Fichiers .netmodule en tant qu'entrée de l'Éditeur de liens pour plus d'informations) lui est passé. Si vous ne spécifiez pas /LTCG explicitement lors du passage de /GL ou de modules MSIL à l'éditeur de liens, ce dernier finit par le détecter et redémarre la liaison avec /LTCG. Spécifiez explicitement /LTCG lors du passage de /GL et de modules MSIL à l'éditeur de liens pour accélérer au maximum la génération.
L'utilisation de /LTCG n'est pas valide avec /INCREMENTAL.
Lorsque /LTCG est utilisé avec /Og, /O1, /O2 ou /Ox, les optimisations suivantes sont effectuées :
Mise sur une fonctionnalité inline inter-module ;
allocation du registre inter-procédures (systèmes d'exploitation 64 bits uniquement) ;
convention d'appel personnalisée (x86 uniquement) ;
petit déplacement TLS (x86 uniquement) ;
double alignement des piles (x86 uniquement) ;
amélioration de la suppression des ambiguïtés en mémoire (meilleures informations d'interférence pour les variables globales et les paramètres d'entrée).
L'utilisation de /LTCG et de /Ogt se traduit par une optimisation du double alignement.
Si /LTCG et /Ogs sont spécifiés, le double alignement ne sera pas effectué. Si la plupart des fonctions d'une application sont compilées pour la rapidité, d'autres l'étant pour la réduction de leur taille (par exemple, à l'aide du pragma optimize), le compilateur va procéder à un double alignement des fonctions optimisées pour la taille si celles-ci appellent des fonctions qui en ont besoin.
Si le compilateur peut identifier tous les sites d'appel d'une fonction, il ignore les modificateurs de convention d'appel explicites sur une fonction et tente d'optimiser la convention d'appel de la fonction :
en passant les paramètres dans les registres ;
en réorganisant les paramètres pour l'alignement ;
en supprimant les paramètres inutilisés.
Si une fonction est appelée via un pointeur fonction, ou si une fonction peut être appelée en dehors d'un module compilé avec /GL, le compilateur ne tente pas d'optimiser la convention d'appel d'une fonction.
Notes
Si vous utilisez /LTCG et redéfinissez mainCRTStartup, votre application peut avoir un comportement imprévisible concernant le code utilisateur qui s'exécute avant l'initialisation des objets globaux. Il existe trois façons de traiter de ce problème : ne redéfinissez pas mainCRTStartup, ne compilez pas le fichier qui contient mainCRTStartup avec /LTCG ou initialisez les variables et objets globaux de manière statique, dans la mesure du possible.
Modules /LTCG et MSIL
Les modules compilés avec /GL et /clr peuvent être utilisés comme entrée dans l'éditeur de liens si /LTCG est spécifié :
/LTCG peut accepter des fichiers objets natifs, des fichiers objets natifs/managés mixtes (compilés avec /clr), des fichiers objets purs (compilés avec /clr:pure) et des fichiers objets sécurisés (compilés avec /clr:safe)
/LTCG peut accepter des fichiers .netmodule sécurisés créés avec /clr:safe /LN dans Visual C++ et /target:module dans tout autre compilateur Visual Studio. . Les fichiers .netmodule créés avec /clr ou /clr:pure ne sont pas acceptés par /LTCG.
/LTCG:PGI n'accepte pas de modules natifs compilés avec /GL et /clr, ou de modules pure (produits avec /clr:pure).
Pour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d'informations, consultez Modification des paramètres d'un projet.
Cliquez sur le dossier Propriétés de configuration.
Cliquez sur la page de propriétés Général.
Modifiez la propriété Optimisation de l'ensemble du programme.
Vous pouvez également appliquer /LTCG à des générations spécifiques en choisissant Optimisation guidée par profil dans le menu Générer, ou en cliquant avec le bouton droit sur le nom du projet dans l'Explorateur de solutions et en sélectionnant l'une des options Optimisation guidée par profil.
Pour définir cette option du compilateur par programme
- Consultez LinkTimeCodeGeneration.