Optimisation du code
Mise à jour : novembre 2007
L'optimisation désigne le processus de réglage fin du fonctionnement de l'exécutable en vue d'obtenir les meilleures performances et la plus petite quantité de code possibles. Visual C++ met en œuvre les mécanismes d'optimisation de code suivants :
Pragmas et mots clés que vous pouvez insérer dans le code source.
Options du compilateur prenant en charge les optimisations ; consultez Options du compilateur classées par catégorie.
Amélioration des performances du programme
Pour plus d'informations sur la manière dont les méthodes de programmation appropriées peuvent améliorer l'exécution du programme, consultez :
À propos de l'optimisation du code
Dans la mesure où l'optimisation modifie le code créé par le compilateur, il est préférable d'optimiser le code après l'avoir complètement testé et débogué. Vous pouvez ainsi déboguer le code qui correspond étroitement à votre code source, sans vous soucier des effets de l'optimisation. Une fois que vous avez appliqué les optimisations, vous devez tester le code de nouveau. Parfois, le code change de comportement après l'application des optimisations. En ce cas, vous devez peut-être déboguer le code optimisé. Consultez également Problèmes courants lors de la création d'une version release pour plus d'informations.
Le code optimisé donne parfois des réponses différentes non pas à cause d'une erreur, mais parce que l'optimisation change l'ordre des calculs, d'où des résultats légèrement différents, compte tenu des limites de la précision à virgule flottante.
Vous pouvez également remarquer la présence de quelques messages d'avertissement supplémentaires lorsque vous compilez le code avec l'optimisation. Ce comportement est normal car certains avertissements se rapportent uniquement au code optimisé. Si vous prêtez attention à ces avertissements, vous pourrez éviter la plupart des problèmes liés à l'optimisation.
Paradoxalement, l'optimisation d'un programme en vue d'accélérer son exécution peut parfois avoir l'effet inverse, car certaines optimisations destinées à produire cette accélération se traduisent en fait par une augmentation de la taille du code. L'utilisation de fonctionnalités inline, par exemple, élimine le temps système des appels aux fonctions, mais le traitement inline d'une trop grande quantité de code peut augmenter la taille de votre programme au point d'en multiplier le nombre d'erreurs de page dans la mémoire virtuelle. Par conséquent, le gain obtenu en termes de vitesse par l'élimination des appels aux fonctions peut être annulé par le phénomène d'échange de mémoire. Pour cette raison, il convient de mesurer les performances de votre programme avant et après l'application des optimisations. Pour obtenir des instructions générales sur la meilleure méthode d'optimisation de votre application, consultez Méthodes conseillées pour l'optimisation.
Pragma optimize
Si une section de votre code génère des erreurs ou un ralentissement en rapport avec l'optimisation, vous pouvez utiliser le pragma optimize afin de désactiver l'optimisation pour cette section. Placez le code entre deux pragmas, comme ceci :
#pragma optimize("", off)
// some code here
#pragma optimize("", on)
Rubriques supplémentaires
Pour des rubriques supplémentaires sur l'optimisation, consultez :
L'utilisation d'un nom de fonction sans () ne génère pas de code
Spécification de l'optimisation du compilateur pour un projet ATL
Pour plus d'informations sur la réduction de la durée de chargement des méthodes DLL, consultez l'article « Optimizing DLL Load Time Performance », dans la colonne « Under the Hood » de « MSDN Magazine », dans la base de connaissances MSDN Library.
Pour plus d'informations sur la réduction de la pagination dans les applications, consultez les parties 1 et 2 de l'article « Improving Runtime Performance with the Smooth Working Set Tool », dans la colonne « Bugslayer » de « MSDN Magazine » de MSDN Library.