/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
STATUS
OFF
|NOSTATUS
||}]
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 /LTCG
de . 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 /Og
de , , /O1
ou /O2
, les /Ox
optimisations 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 /GL
de , 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 mainCRTStartup
le 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/clr
de ). 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é Optimisation du programme entière définit plusieurs options du compilateur et de l’é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 l’optimisation complète du programme pour votre projet :
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.
Sélectionnez la page de propriétés Propriétés de configuration>Général.
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 :
Ouvrez la boîte de dialogue Pages de propriétés du projet.
Sélectionnez la page de propriétés d’optimisation de l’éditeur >de liens>de configuration.
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)
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 :
Ouvrez la boîte de dialogue Pages de propriétés du projet.
Sélectionnez la page de propriétés Général de l’Éditeur >de propriétés>de configuration.
Modifiez la propriété État du lien. Choisissez OK ou Appliquer pour enregistrer vos modifications.
Pour définir cette option du compilateur par programmation
- Consultez LinkTimeCodeGeneration.
Voir aussi
Informations de référence sur l’éditeur de liens MSVC
Options de l’éditeur de liens MSVC