/Og
(Optimisations globales)
Déconseillé. Fournit des optimisations locales et globales, une allocation d’inscription automatique et une optimisation de boucle. Nous vous recommandons d’utiliser à /O1
la place (Réduire la taille) ou /O2
(Agrandir la vitesse).
Syntaxe
/Og
Notes
/Og
est déconseillé. Ces optimisations sont désormais activées par défaut quand toutes les optimisations sont activées. Pour plus d’informations sur les optimisations, consultez , (Réduire la taille, agrandir la vitesse) ou /Ox
(Activer la plupart des optimisations de vitesse). /O2
/O1
Les optimisations suivantes sont disponibles sous /Og
:
Élimination des sous-expressions courantes locales et globales
Dans cette optimisation, la valeur d’une sous-expression commune est calculée une seule fois. Dans l’exemple suivant, si les valeurs des
b
c
trois expressions et ne changent pas, le compilateur peut affecter le calcul d’uneb + c
variable temporaire et utiliser cette variable pourb + c
:a = b + c; d = b + c; e = b + c;
Pour l’optimisation des sous-expressions courantes locales, le compilateur examine les sections courtes du code pour les sous-expressions courantes. Pour l’optimisation globale des sous-expressions courantes, le compilateur recherche des sous-expressions communes dans l’ensemble des fonctions.
Allocation d’inscription automatique
Cette optimisation permet au compilateur de stocker des variables et des sous-expressions fréquemment utilisées dans les registres. Le
register
mot clé est ignoré par défaut et provoque un diagnostic sous ou une/std:c++17
version ultérieure.Optimisation de la boucle
Cette optimisation supprime les sous-expressions invariantes du corps d’une boucle. Une boucle optimale contient uniquement les expressions dont les valeurs changent par le biais de chaque exécution de la boucle. Dans l’exemple suivant, l’expression
x + y
ne change pas dans le corps de la boucle :i = -100; while( i < 0 ) { i += x + y; }
Après l’optimisation,
x + y
est calculée une fois plutôt que chaque fois que la boucle est exécutée :i = -100; t = x + y; while( i < 0 ) { i += t; }
L’optimisation des boucles est beaucoup plus efficace lorsque le compilateur ne peut supposer aucun alias, que vous définissez avec
__restrict
,noalias
ourestrict
.Remarque
Vous pouvez activer ou désactiver l’optimisation globale sur une base de fonction par fonction à l’aide du
optimize
pragma avec l’optiong
.
Pour plus d’informations, consultez (Générer des fonctions intrinsèques) et /Ox
(Activer la plupart des optimisations de vitesse)./Oi
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 Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.
Entrez l’option du compilateur dans la zone Options supplémentaires.
Pour définir cette option du compilateur par programmation
- Consultez AdditionalOptions.