Partager via


/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’une b + c variable temporaire et utiliser cette variable pour b + 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, noaliasou restrict.

    Remarque

    Vous pouvez activer ou désactiver l’optimisation globale sur une base de fonction par fonction à l’aide du optimize pragma avec l’option g .

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

  1. 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.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. Entrez l’option du compilateur dans la zone Options supplémentaires.

Pour définir cette option du compilateur par programmation

Voir aussi

Syntaxe de la ligne de commande du compilateur MSVC