/Og (Optimisations globales)
Fournit des optimisations locales et globales, une allocation automatique de registres et l'optimisation des boucles. Déconseillé.
/Og
Notes
Les propriétés suivantes sont disponibles :
Élimination de sous-expressions communes 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 de b et de c ne changent pas entre les trois expressions, le compilateur peut assigner le calcul de b + c à une variable temporaire, et substituer la variable à b + c :
a = b + c; d = b + c; e = b + c;
Pour une optimisation de sous-expressions communes locales, le compilateur examine de courtes sections de code pour y rechercher des sous-expressions communes. Pour une optimisation de sous-expressions communes globales, le compilateur recherche les sous-expressions communes dans des fonctions entières.
Allocation automatique de registres
Cette optimisation permet au compilateur de stocker dans des registres les variables et les sous-expressions fréquemment utilisées ; le mot clé register est ignoré.
Optimisation des boucles
Cette optimisation supprime les sous-expressions de type invariant dans le corps d'une boucle. Une boucle optimale contient uniquement des expressions dont les valeurs changent lors 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 au lieu de l'être à chaque exécution de la boucle :
i = -100; t = x + y; while( i < 0 ) { i += t; }
L'optimisation de boucles est beaucoup plus efficace lorsque le compilateur peut prendre par défaut l'absence de crénelage, ce qui se définit à l'aide de __restrict, noalias ou restrict.
Notes
Vous pouvez activer ou désactiver l'optimisation globale fonction par fonction en utilisant le pragma optimize avec l'option g.
/Og active également l'optimisation de valeur de retour nommée, ce qui élimine le constructeur de copie et le destructeur d'une valeur de retour basée sur la pile. Pour plus d'informations, consultez /O1, /O2 (Réduire la taille, augmenter la vitesse).
Pour obtenir des informations connexes, consultez /Oi (Générer des fonctions intrinsèques) et /Ox (Optimisation complète).
L'option /Og est déconseillée ; utilisez /O1 ou /O2. Pour plus d'informations, consultez Deprecated Compiler Options.
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 Comment : ouvrir les pages de propriétés d'un projet.
Cliquez sur le dossier C/C++.
Cliquez sur la page de propriétés Ligne de commande.
Spécifiez l'option du compilateur dans la zone Options supplémentaires.
Pour définir cette option du compilateur par programmation
- Consultez AdditionalOptions.