53 votes

Conseils généraux d'amélioration des performances C ++

Quelqu'un pourrait-il m'indiquer un article, ou d'écrire quelques conseils ici au sujet de certains de programmation c++, des habitudes qui sont généralement valide (pas de réels inconvénients) et améliore les performances? Je ne veux pas dire des modèles de programmation et de la complexité de l'algorithme - je besoin de petites choses comme la façon dont vous définissez vos fonctions, les choses à faire/à éviter dans les boucles, ce qui à allouer sur la pile, ce qui sur le tas, et ainsi de suite.

Il n'est pas question de faire un logiciel particulier plus rapide, aussi il n'est pas sur la façon de créer un logiciel propre conception, mais plutôt les habitudes de programmation que - si vous avez toujours les appliquer, vous permet de rendre votre code plutôt un peu plus rapide qu'un peu plus lent.

Merci :)

36voto

Laurence Gonsalves Points 50783

Un certain nombre de conseils Effective C++, Plus Efficace, C++, Efficace STL et C++ Normes de Codage sont le long de cette ligne.

Un exemple simple d'une telle astuce: utiliser la pré-incrémentation (++i) plutôt que de post-incrémentation (++i) lorsque cela est possible. Ceci est particulièrement important avec les itérateurs, en tant que post-incrémentation implique la copie de l'itérateur. Vous optimiseur peut être en mesure d'annuler cette, mais il n'est pas de tout travail supplémentaire pour écrire pré-incrémentation au lieu de cela, alors pourquoi prendre le risque?

31voto

Michael Kristofik Points 16035

Si je vous comprends bien, vous demandez au sujet d'éviter Prématuré Pessimization, un bon complément pour éviter l'Optimisation Prématurée. Le n ° 1 chose à éviter, basé sur mon expérience, est de ne pas copier de gros objets chaque fois que possible. Cela comprend:

  • passer des objets par (const) référence à des fonctions
  • de retour des objets par (const) de référence dans la mesure du possible
  • assurez-vous de déclarer une variable de référence lorsque vous en avez besoin

Ce dernier point nécessite quelques explications. Je ne peux pas vous dire combien de fois j'ai vu cela:

class Foo
{
    const BigObject & bar();
};

// ... somewhere in code ...
BigObject obj = foo.bar();  // OOPS!  This creates a copy!

Le droit chemin est:

const BigOject &obj = foo.bar();  // does not create a copy

Ces lignes directrices s'appliquent à quelque chose de plus grand qu'un pointeur intelligent ou un type. Aussi, je vous recommande fortement d'investir du temps à apprendre à le profil de votre code. Un bon outil de profilage pour aider à capturer le gaspillage des opérations.

15voto

Nikolai N Fetissov Points 52093

L'un des bons points de départ est la série du gourou de la semaine de Sutter , ainsi que les livres exceptionnels en C ++ qui en sont issus.

12voto

Fred Points 636

Utilisez des foncteurs (classes avec operator() implémentées) au lieu des pointeurs de fonction. Le compilateur a un travail plus facile en alignant l'ancien. C’est pourquoi les std::sort C ++ de C ++ ont tendance à mieux fonctionner (lorsqu'un foncteur est utilisé) que les qsort de C.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X