/Og (Optimisations globales)

Mise à jour : novembre 2007

Fournit des optimisations locales et globales, une allocation automatique de registres et l'optimisation des boucles. Désapprouvé.

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

    Remarque :

    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. Consultez /O1, /O2 (Réduire la taille, augmenter la vitesse) pour plus d'informations.

Pour obtenir des informations connexes, consultez /Oi (Générer des fonctions intrinsèques) et /Ox (Optimisation complète).

/Og est désapprouvé dans Visual C++ 2005 ; utilisez soit /O1, soit /O2. Pour plus d'informations, consultez Options du compilateur désapprouvées dans Visual C++ 2005.

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 Comment : ouvrir les pages de propriétés d'un projet.

  2. Cliquez sur le dossier C/C++.

  3. Cliquez sur la page de propriétés Ligne de commande.

  4. Spécifiez l'option du compilateur dans la zone Options supplémentaires.

Pour définir cette option du compilateur par programme

Voir aussi

Référence

/O (Optimiser le code), options

Options du compilateur

Définition des options du compilateur