Partager via


/LTCG (Génération de code durant l'édition de liens)

/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]

Notes

  • :NOSTATUS | :STATUS (facultatif)
    Spécifie si l'éditeur de liens affiche un indicateur de progression qui affiche le pourcentage du lien terminé. Par défaut, ces informations d'état ne sont pas affichées.

  • :PGINSTRUMENT (facultatif)
    Spécifie que l'éditeur de liens fournit un fichier .pgd en vue des séries de tests instrumentés sur l'application. Vous pouvez également utiliser l'option /PGD pour spécifier un nom de fichier ou une position pour le fichier .pgd.

    Les données qui sont recueillies à partir des exécutions instrumentées sont 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 utilise les données de profil qui sont 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 dans /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)
    Active 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 n'est pas optimisé en utilisant une 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.

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 qui sont 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 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) lui est passé. Si vous ne spécifiez pas /LTCG explicitement lorsque vous passez /GL ou des modules MSIL à l'éditeur de liens, ce dernier le détecte et redémarre la liaison avec /LTCG. Spécifiez explicitement /LTCG lorsque vous passez /GL et des modules MSIL à l'éditeur de liens pour accélérer au maximum la génération.

L'utilisation de /LTCG avec /INCREMENTAL n'est pas valide.

Lorsque /LTCG est utilisé dans des modules de lien compilés à l'aide de /Og, de /O1, de /O2, ou de /Ox, les optimisations suivantes sont exécuté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).

Notes

L'éditeur de liens décide avec quelles optimisations chaque fonction a été compilée et applique les mêmes optimisations au moment de la liaison.

L'utilisation de /LTCG et de /Ogt provoque une optimisation à double alignement.

Si /LTCG et /Ogs sont spécifiés, le double alignement n'est pas exécuté. 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 optimiser ), le compilateur procède à un double alignement des fonctions optimisées pour la taille si celles-ci appellent des fonctions qui le requièrent.

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 pas redéfinir mainCRTStartup, ne pas compiler le fichier qui contient mainCRTStartup avec /LTCG, ou initialiser les variables et objets globaux de manière statique, dans la mesure du possible.

Modules /LTCG et MSIL

Les modules qui sont 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 accepte le qualificatif sûr .netmodules, qui peut être créé à l'aide de /clr:safe /LN dans Visual C++ et de /target:module dans n'importe quel 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 les modules natifs compilés à l'aide de /GL et de /clr, ou des modules purs (produits à l'aide de /clr:pure)

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

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

  2. Sélectionnez le dossier Propriétés de configuration.

  3. Sélectionnez la page de propriétés Général.

  4. Modifiez la propriété Optimisation de l'ensemble du programme.

Vous pouvez également appliquer /LTCG des versions spécifiques en choisissant Générer, Optimisation guidée par profil dans la barre de menus, ou en choisissant l'une des options d'optimisation guidée par profil dans le menu contextuel du projet.

Pour définir cette option du compilateur par programmation

Voir aussi

Référence

Définition des options de l'Éditeur de liens

Options de l'Éditeur de liens