Je m'appelle Davide Faconti et mon travail est l'un des meilleurs au monde: je travaille en robotique .
Ce blog / référentiel est maintenu pendant mon temps libre et il n'est pas lié à mon travail là-bas. Par conséquent, les opinions (et les mèmes) sont tous à moi et ne représentent en aucune façon mon employeur .
J'adore la programmation C ++ et l'open source et ce "journal" est ma petite contribution à la communauté OSS.
L'optimisation du code en C ++ est quelque chose que personne ne peut résister. Vous pouvez vous amuser et prétendre que vous faites quelque chose d'utile pour votre organisation en même temps!
Dans ce référentiel, j'enregistrerai quelques modèles de conception simples pour améliorer votre code et supprimer les frais généraux inutiles en C ++ .
Si vous êtes un expert C ++ chevronné, vous avez probablement déjà votre propre ensemble de règles.
Ces règles vous aident à ressembler à un ingénieur de mauvais cul / rockstar / 10x à vos collègues.
Vous êtes le genre de personne qui laisse tomber avec désinvolture un STD :: Vector <> :: Réserve avant une boucle et hoche la tête, souriant, regardant l'amélioration des performances et l'étonnement du membre de votre équipe.

Espérons que les exemples de ce référentiel vous aideront à atteindre ce statut de gourou et, en effet secondaire, à sauver la planète du réchauffement climatique, à épargner les cycles de processeurs inutiles d'être gaspillés.
Ensuite, malheureusement, quelqu'un de l'autre côté de la planète commencera à exploiter les Bitcoins ou l'écrira de son application à Python et tous vos efforts pour économiser de l'électricité étaient pour rien.
Je plaisante, développeurs Python, nous vous aimons!
Narrateur: "Il ne plaisantait pas ..."
La toute première chose que toute personne préoccupée par la performance devrait faire est:
Mes collègues et moi avons presque toujours tort sur les raisons pour lesquelles un morceau de code est lent.
Parfois, nous avons raison, mais il est vraiment difficile de savoir à l'avance comment le refactoring améliorera les performances. De bons outils de profilage montrent en quelques minutes les "fruits à faible suspension": travail minimum, avantage maximum!
Résumé: 10 minutes de profilage peut vous faire économiser des heures de devinettes et de refactorisation.
Mes outils "Goto" dans Linux sont Hotspot et Heaptrack. Je comprends également que Windows a des outils similaires.

Dans la guerre de référence, si vous êtes le soldat, ce sont vos grenades de fusil et de main.
Une fois que vous savez quelle partie du code mérite d'être optimisée, vous voudrez peut-être utiliser Google Benchmark pour mesurer le temps passé dans une classe ou une fonction très spécifique.
Vous pouvez même l'exécuter Google Benchmark en ligne ici: Quick Bench.com.

Écrire un bon code, c'est comme se brosser les dents: vous devriez le faire sans y penser trop.
C'est un muscle que vous devez vous entraîner, qui deviendra plus fort au fil du temps. Mais ne vous inquiétez pas: une fois que vous commencerez, vous commencerez à voir des modèles récurrents qui sont étonnamment simples et qui fonctionnent dans de nombreux cas d'utilisation différents.
Alerte de spoiler : L'une de mes astuces les plus appréciées consiste à minimiser le nombre d'allocations de tas . Vous n'avez aucune idée de ce que cela aide.
Mais faisons quelque chose de absolument clair:
En d'autres termes, réfléchissez à deux fois avant de faire un changement dans votre code qui le rend moins lisible ou plus difficile à déboguer, simplement parce que vous pensez qu'il peut fonctionner 2,5% plus rapidement.
Pour une expérience de lecture plus confortable, visitez: https://cpp-optimizations.netlify.app
Utilisez la référence const par défaut.
Déplacer le sémantique (TODO).
Optimisation de la valeur de retour (TODO).
Utilisez Std :: Vector <> :: Réserve par défaut
"J'ai appris les listes liées à l'université, dois-je les utiliser?" Noope.
Vous n'avez pas besoin d'une std::map<> pour cela.
Optimisation de petit vecteur
Les cordes sont (presque) vecteurs
Lorsque vous ne vous inquiétez pas: une petite optimisation de chaîne.
Concaténation des cordes: le faux sens de la sécurité de operator+ .
std::string_view : Love à première vue (TODO).
Exemple: 2D / 3D transforme la bonne voie.
Iterating sur une matrice 2D: moins élégante, plus performante.
boost::container::flat_map . Vous n'imaginerez pas ce qui s'est passé ensuite.Moyen plus simple et plus rapide de filtrer les nuages de points dans PCL.
Palindrome rapide: le coût des succursales conditionnelles
Ce travail est sous licence sous CC BY-SA 4.0