/LTCG (Génération de code au moment du lien)

Permet /LTCG d’effectuer une optimisation complète du programme ou de créer une instrumentation d’optimisation guidée par profil (PGO), d’effectuer une formation et de créer des builds optimisées guidées par profil.

Syntaxe

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

Ces options sont dépréciées à partir de Visual Studio 2015 :

/LTCG:{PGINSTRUMENT|PGOPTIMIZE|PGUPDATE}

Arguments

INCREMENTAL
(Facultatif) Spécifie que l’éditeur de liens applique uniquement l’optimisation du programme entier ou la génération de code au moment du lien (LTCG) aux fichiers affectés par une modification, au lieu de l’ensemble du projet. Par défaut, cet indicateur n’est pas défini quand /LTCG il est spécifié, et l’ensemble du projet est lié à l’aide de l’optimisation complète du programme.

NOSTATUS | STATUS
(Facultatif) Spécifie si l’éditeur de liens affiche un indicateur de progression qui montre le pourcentage d’exécution du lien. Par défaut, ces informations d’état ne s’affichent pas.

OFF
(Facultatif) Désactive la génération de code durant l’édition de liens. L’éditeur de liens traite tous les modules compilés comme /GL s’ils sont compilés sans cette option, et tous les modules MSIL provoquent l’échec du lien.

PGINSTRUMENT
(Facultatif) Cette option est dépréciée à partir de Visual Studio 2015. Au lieu de cela, utilisez /LTCG et /GENPROFILE ou /FASTGENPROFILE générez une build instrumentée pour l’optimisation guidée par profil. Les données recueillies à partir des séries de tests instrumentées sont utilisées pour créer une image optimisée. Pour plus d’informations, consultez Optimisations guidées par profil. La forme courte de cette option est /LTCG:PGI.

PGOPTIMIZE
(Facultatif) Cette option est dépréciée à partir de Visual Studio 2015. À la place, utilisez /LTCG et /USEPROFILE créez une image optimisée. Pour plus d’informations, consultez Optimisations guidées par profil. La forme courte de cette option est /LTCG:PGO.

PGUPDATE
(Facultatif) Cette option est dépréciée à partir de Visual Studio 2015. À la place, utilisez /LTCG et /USEPROFILE régénérez une image optimisée. Pour plus d’informations, consultez Optimisations guidées par profil. La forme courte de cette option est /LTCG:PGU.

Notes

L’option /LTCG indique à l’éditeur de liens d’appeler le compilateur et d’effectuer une optimisation complète du programme. Vous pouvez également effectuer l’optimisation guidée par profil. Pour plus d’informations, consultez Optimisations guidées par profil.

Avec les exceptions suivantes, vous ne pouvez pas ajouter d’options d’éditeur de liens à la combinaison PGO de /LTCG et /USEPROFILE qui n’ont pas été spécifiées dans la combinaison /LTCG/GENPROFILE d’initialisation et d’options PGO précédente :

Toutes les options d’éditeur de liens spécifiées avec les /LTCG options d’initialisation /GENPROFILE de PGO n’ont pas besoin d’être spécifiées lorsque vous générez à l’aide /LTCG et /USEPROFILE; elles sont implicites.

Le reste de cet article traite de la génération de code au moment du lien effectuée par /LTCG.

/LTCG est implicite avec /GL.

L’éditeur de liens appelle la génération de code au moment du lien s’il a passé un module compilé à l’aide /GL ou un module MSIL (voir .netmodule Fichiers en tant qu’entrée éditeur de liens). Si vous ne spécifiez pas explicitement quand vous passez /LTCG ou que vous transmettez des /GL modules MSIL à l’éditeur de liens, l’éditeur de liens détecte finalement cette situation et redémarre le lien à l’aide /LTCGde . Spécifiez explicitement quand vous passez et que vous transmettez /LTCG des /GL modules MSIL à l’éditeur de liens pour obtenir les performances de build les plus rapides possibles.

Pour des performances encore plus rapides, utilisez /LTCG:INCREMENTAL. Cette option indique à l’éditeur de liens de réoptimiser uniquement les fichiers affectés par une modification de fichier source, au lieu de l’intégralité du projet. Cette option peut réduire considérablement le temps de liaison nécessaire. Cette option n’est pas la même option que la liaison incrémentielle. Si vous supprimez l’option, supprimez également toute /LTCGOUT option permettant d’améliorer les /LTCG:INCREMENTAL temps de génération et l’utilisation du disque.

/LTCG n’est pas valide pour une utilisation avec /INCREMENTAL.

Lorsqu’il /LTCG est utilisé pour lier des modules compilés à l’aide /Ogde , , /O1ou /O2, les /Oxoptimisations suivantes sont effectuées :

  • Expansion inline entre modules

  • Allocation de registre interprocédurale (seulement sur les systèmes d’exploitation 64 bits)

  • Convention d’appel personnalisée (x86 uniquement)

  • Déplacement TLS réduit (x86 uniquement)

  • Alignement de pile double (x86 uniquement)

  • Levée d’ambiguïté améliorée de la mémoire (meilleures informations d’interférence pour les variables globales et les paramètres d’entrée)

Remarque

L’éditeur de liens détermine les optimisations qui ont été utilisées pour compiler chaque fonction et applique les mêmes optimisations au moment de la liaison.

L’utilisation et /O2 la cause de /LTCG l’optimisation de l’alignement double.

Si /LTCG et /O1 sont spécifiés, l’alignement double n’est pas effectué. Si la plupart des fonctions d’une application sont compilées pour une vitesse, avec quelques fonctions compilées pour la taille (par exemple, à l’aide du optimize pragma), le compilateur aligne deux fois les fonctions optimisées pour la taille si elles appellent des fonctions qui nécessitent un double alignement.

Si le compilateur peut identifier tous les sites d’appel d’une fonction, le compilateur ignore les modificateurs de convention d’appel explicites et tente d’optimiser la convention d’appel de la fonction :

  • passer des paramètres dans les registres

  • réorganiser les paramètres pour l’alignement

  • supprimer les paramètres inutilisés

Si une fonction est appelée par le biais d’un pointeur de fonction ou si une fonction est appelée en dehors d’un module compilé à l’aide /GLde , le compilateur ne tente pas d’optimiser la convention d’appel de la fonction.

Remarque

Si vous utilisez /LTCG et redéfinissez mainCRTStartup, votre application peut avoir un comportement imprévisible lié au code utilisateur qui s’exécute avant l’initialisation des objets globaux. Il existe trois façons de résoudre ce problème : ne pas redéfinir , ne pas compiler mainCRTStartuple fichier qui contient mainCRTStartup à l’aide /LTCG, ou initialiser des variables globales et des objets statiquement.

/LTCG et modules MSIL

Les modules compilés à l’aide /GL et /clr peuvent être utilisés comme entrée de l’éditeur de liens quand /LTCG ils sont spécifiés.

  • /LTCG peut accepter des fichiers objet natifs et des fichiers d’objets natifs/managés mixtes (compilés à l’aide /clrde ). Les /clr:pure options du compilateur et /clr:safe des options sont déconseillées dans Visual Studio 2015 et non prises en charge dans Visual Studio 2017 et versions ultérieures.

  • /LTCG:PGI n’accepte pas les modules natifs compilés à l’aide /GL et /clr

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

La propriété Qui le Program Optimization définit plusieurs options de compilateur et d’éditeur de liens, notamment /LTCG. Nous vous recommandons d’utiliser cette propriété pour modifier les paramètres d’une configuration de build entière. Pour définir Qui le Program Optimization pour votre projet :

  1. Ouvrez la boîte de dialogue Pages de propriétés du projet. Pour plus d’informations, consultez Définir les propriétés du compilateur et de la génération.

  2. Sélectionnez la page de propriétés Propriétés de configuration>Général.

  3. Modifiez la propriété Optimisation de l’ensemble du programme . Choisissez OK ou Appliquer pour enregistrer vos modifications.

Vous pouvez également appliquer /LTCG des builds spécifiques en choisissant l’optimisation> guidée du profil de build dans la barre de menus ou en choisissant l’une des options d’optimisation guidée du profil dans le menu contextuel du projet.

Pour activer la génération de code de temps de liaison séparément ou définir une option spécifique de génération de code de temps de liaison :

  1. Ouvrez la boîte de dialogue Pages de propriétés du projet.

  2. Sélectionnez la page de propriétés d’optimisation de l’éditeur >de liens>de configuration.

  3. Modifiez la propriété Link Time Code Generation en l’une des options suivantes :

    • Par défaut
    • Utiliser la génération de code de temps de liaison rapide (LTCG :incrémentiel)
    • Utiliser la génération de code de temps de liaison (LTCG)
    • Optimisation guidée du profil - Instrument (LTCG :PGInstrument)
    • Optimisation guidée du profil - Optimisation (LTCG :PGOptimize)
    • Optimisation guidée du profil - Mise à jour (LTCG :PGUpdate)
  4. Choisissez OK ou Appliquer pour enregistrer vos modifications.

Pour spécifier si l’éditeur de liens affiche un indicateur de progression pour la génération de code de temps de liaison :

  1. Ouvrez la boîte de dialogue Pages de propriétés du projet.

  2. Sélectionnez la page de propriétés Général de l’Éditeur >de propriétés>de configuration.

  3. Modifiez la propriété État du lien. Choisissez OK ou Appliquer pour enregistrer vos modifications.

Pour définir cette option du compilateur par programmation

Voir aussi

Informations de référence sur l’éditeur de liens MSVC
Options de l’éditeur de liens MSVC