/OPT (Optimisations)
Contrôle les optimisations effectuées par LINK pendant une génération.
Syntaxe
/OPT :{REF | NOREF}
/OPT :{ICF[=itérations] | NOICF}
/OPT :{LBR | NOLBR}
Arguments
REF | NOREF
/OPT :REF élimine les fonctions et les données qui ne sont jamais référencées ; /OPT :NOREF conserve les fonctions et les données qui ne sont jamais référencées.
Lorsque /OPT :REF est activé, LINK supprime les fonctions et données empaquetées non référencées, appelées COMDAT. Cette optimisation porte le nom d'élimination COMDAT transitive. L’option /OPT :REF désactive également la liaison incrémentielle.
Les fonctions incorporées et les fonctions membres définies à l’intérieur d’une déclaration de classe sont toujours des COMDAT. Toutes les fonctions d’un fichier objet sont effectuées en COMDATs si elles sont compilées à l’aide de l’option /Gy . Pour placer const
des données dans COMDATs, vous devez la déclarer à l’aide __declspec(selectany)
de . Pour plus d’informations sur la façon de spécifier des données pour la suppression ou le pliage, consultez selectany.
Par défaut, /OPT :REF est activé par l’éditeur de liens, sauf si /OPT :NOREF ou /DEBUG est spécifié. Pour remplacer cette valeur par défaut et conserver les COMDAT non référencés dans le programme, spécifiez /OPT :NOREF. Vous pouvez utiliser l’option /INCLUDE pour remplacer la suppression d’un symbole spécifique.
Si /DEBUG est spécifié, la valeur par défaut de /OPT est NOREF et toutes les fonctions sont conservées dans l’image. Pour remplacer cette valeur par défaut et optimiser une build de débogage, spécifiez /OPT :REF. Cela peut réduire la taille de votre exécutable et peut être une optimisation utile même dans les builds de débogage. Nous vous recommandons également de spécifier /OPT :NOICF pour conserver des fonctions identiques dans les builds de débogage. Cela facilite la lecture des traces de la pile et la définition des points d’arrêt dans les fonctions qui seraient pliées ensemble dans le cas contraire.
ICF[=itérations] | NOICF
Utilisez ICF[=itérations] pour effectuer un pliage COMDAT identique. Les COMDAT redondants peuvent être supprimés de la sortie de l'éditeur de liens. Le paramètre d’itérations facultatives spécifie le nombre de fois où parcourir les symboles des doublons. Le nombre d’itérations par défaut est 1. Des itérations supplémentaires peuvent permettre de localiser davantage de doublons n’ayant pas été détectés par pliage au cours de l’itération précédente.
Par défaut, /OPT :ICF est activé par l’éditeur de liens, sauf si /OPT :NOICF ou /DEBUG est spécifié. Pour remplacer cette valeur par défaut et empêcher les COMDAT d’être pliés dans le programme, spécifiez /OPT :NOICF.
Dans une build de débogage, vous devez spécifier explicitement /OPT :ICF pour activer le pliage COMDAT. Toutefois, étant donné que /OPT :ICF peut fusionner des données ou des fonctions identiques, il peut modifier les noms de fonctions qui apparaissent dans les traces de pile. Il peut également rendre impossible de définir des points d’arrêt dans certaines fonctions ou d’examiner certaines données dans le débogueur, et peut vous amener dans des fonctions inattendues lorsque vous parcourez votre code en une seule étape. Le comportement du code est identique, mais la présentation du débogueur peut être très déroutante. Par conséquent, nous vous déconseillons d’utiliser /OPT :ICF dans les builds de débogage, sauf si les avantages du code plus petit l’emportent sur ces inconvénients.
Remarque
Étant donné que /OPT :ICF peut affecter la même adresse à différentes fonctions ou à des membres de données en lecture seule (c’est-à-dire, const
des variables lors de la compilation à l’aide de /Gy), il peut interrompre un programme qui dépend d’adresses uniques pour les fonctions ou les membres de données en lecture seule. Pour plus d’informations, consultez l’article /Gy (Activer la liaison au niveau des fonctions).
LBR | NOLBR
Les options /OPT :LBR et /OPT :NOLBR s’appliquent uniquement aux fichiers binaires ARM. Étant donné que certaines instructions de branche de processeur ARM ont une plage limitée, si l’éditeur de liens détecte un saut vers une adresse hors plage, il remplace l’adresse de destination de l’instruction de branche par l’adresse d’un code « island » qui contient une instruction de branche qui cible la destination réelle. Vous pouvez utiliser /OPT :LBR pour optimiser la détection des instructions de branche longue et le positionnement des îlots de code intermédiaires pour réduire la taille globale du code. /OPT :NOLBR demande à l’éditeur de liens de générer des îlots de code pour les instructions de branche longues à mesure qu’elles sont rencontrées, sans optimisation.
Par défaut, l’option /OPT :LBR est définie lorsque la liaison incrémentielle n’est pas activée. Si vous souhaitez un lien non incrémentiel, mais pas des optimisations de branche longues, spécifiez /OPT :NOLBR. L’option /OPT :LBR désactive la liaison incrémentielle.
Notes
Lorsqu’il est utilisé sur la ligne de commande, l’éditeur de liens a la valeur par défaut /OPT :REF,ICF,LBR. Si /DEBUG est spécifié, la valeur par défaut est /OPT :NOREF,NOICF,NOLBR.
Les optimisations /OPT diminuent généralement la taille de l’image et augmentent la vitesse du programme. Ces améliorations peuvent être substantielles dans les programmes plus volumineux, c’est pourquoi elles sont activées par défaut pour les builds de vente au détail.
L’optimisation de l’éditeur de liens prend un temps supplémentaire avant, mais le code optimisé permet également de gagner du temps lorsque l’éditeur de liens a moins de réadressages pour résoudre et crée une image finale plus petite et qu’elle gagne encore plus de temps lorsqu’il a moins d’informations de débogage pour traiter et écrire dans la base de données PDB. Lorsque l’optimisation est activée, elle peut entraîner une durée de liaison plus rapide dans l’ensemble, car le petit coût supplémentaire dans l’analyse peut être plus que compensé par les économies de temps dans l’éditeur de liens passe sur des binaires plus petits.
Les arguments /OPT peuvent être spécifiés ensemble, séparés par des virgules. Par exemple, au lieu de /OPT :REF /OPT :NOICF, vous pouvez spécifier /OPT :REF,NOICF.
Vous pouvez utiliser l’option /VERBOSE Linker pour afficher les fonctions supprimées par /OPT :REF et les fonctions pliées par /OPT :ICF.
Les arguments /OPT sont souvent définis pour les projets créés à l’aide de la boîte de dialogue Nouveau projet dans l’IDE Visual Studio, et ont généralement des valeurs différentes pour les configurations de débogage et de mise en production. Si aucune valeur n’est définie pour ces options d’éditeur de liens dans votre projet, vous pouvez obtenir les valeurs par défaut du projet, qui peuvent être différentes des valeurs par défaut utilisées par l’éditeur de liens sur la ligne de commande.
Pour définir l'option OPT:ICF ou OPT:REF de l'éditeur de liens 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 Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Sélectionnez la page de propriétés d’optimisation de l’éditeur >de liens>de configuration.
Modifiez l'une des propriétés suivantes :
Activer le pliage COMDAT
Informations de référence
Pour définir l'option OPT:LBR de l'éditeur de liens 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 Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Sélectionnez la page de Propriétés de configuration>Éditeur de liens>Ligne de commande.
Entrez l’option dans Options supplémentaires :
/opt:lbr
ou/opt:nolbr
Pour définir cette option de l'éditeur de liens par programmation
- Consultez les propriétés EnableCOMDATFolding et OptimizeReferences.