Mein Name ist Davide Faconti und mein Job ist einer der besten der Welt: Ich arbeite in Robotik .
Dieses Blog/Repository wird in meiner Freizeit verwaltet und hängt nicht mit meiner Arbeit dort zusammen. Daher sind Meinungen (und Meme) alle meine und repräsentieren meinen Arbeitgeber in keiner Weise .
Ich liebe C ++ - Programmierung und Open Source, und dieses "Tagebuch" ist mein kleiner Beitrag zur OSS -Community.
Das Optimieren von Code in C ++ ist etwas, dem niemand widerstehen kann. Sie können Spaß haben und so tun, als ob Sie gleichzeitig etwas Nützliches für Ihre Organisation tun!
In diesem Repository werde ich einige einfache Designmuster aufzeichnen, um Ihren Code zu verbessern und unnötige Overheads in C ++ zu entfernen.
Wenn Sie ein erfahrener C ++ - Experte sind, haben Sie wahrscheinlich bereits Ihre eigenen Regeln.
Diese Regeln helfen Ihnen dabei, Ihren Kollegen wie ein böser Ass/Rockstar/10x-Ingenieur auszusehen.
Sie sind die Art von Person, die beiläufig einen std :: vector <> :: reserviert vor einem Schleifen und nickt, lächelt, die Leistungsverbesserung und das Erstaunen Ihres Teammitglieds betrachtet.

Hoffentlich helfen Ihnen die Beispiele in diesem Repository, diesen Status von Guru zu erreichen und als Nebeneffekt den Planeten vor der globalen Erwärmung zu retten und nutzlose CPU -Zyklen vor dem Verschwendung zu sparen.
Leider wird jemand auf der anderen Seite des Planeten mit dem Abbau von Bitcoins beginnen oder seine Bewerbung in Python schreiben, und all Ihre Bemühungen, Strom zu retten, war für nichts.
Ich mache Witze, Python -Entwickler, wir lieben dich!
Erzähler: "Er hat keine Witze gemacht ..."
Das allererste, was eine Person, die sich um Leistung befasst, tun sollte, ist:
Ich und meine Kollegen sind fast immer falsch in Bezug auf die Gründe, warum ein Code -Stück langsam ist.
Manchmal haben wir Recht, aber es ist wirklich schwer zu wissen, wie das Refactoring die Leistung verbessert. Gute Profiling -Tools zeigen in Minuten die "niedrigen Hängefrüchte": Mindestarbeit, maximaler Nutzen!
Zusammenfassend: 10 Minuten Profilerstellung können Sie Stunden erraten und refactoring sparen.
Meine "Goto" -Tools in Linux sind Hotspot und Heaptrack. Ich verstehe, dass Windows auch ähnliche Tools hat.

Wenn Sie der Soldat sind, sind dies Ihr Gewehr und Ihre Handgranaten, wenn Sie der Soldat sind.
Sobald Sie wissen, welcher Teil des Codes es verdient, optimiert zu werden, möchten Sie möglicherweise Google Benchmark verwenden, um die Zeit in einer ganz bestimmten Klasse oder Funktion zu messen.
Sie können es sogar hier online Google Benchmark ausführen: Quick-Bench.com.

Guten Code zu schreiben ist wie die Zähne zu putzen: Sie sollten es tun, ohne zu viel darüber nachzudenken.
Es ist ein Muskel, den Sie trainieren müssen, der im Laufe der Zeit stärker wird. Aber keine Sorge: Sobald Sie anfangen, werden Sie wiederkehrende Muster sehen, die überraschend einfach sind und in vielen verschiedenen Anwendungsfällen funktionieren.
Spoiler -Alarm : Einer meiner beliebtesten Tricks ist die Minimierung der Anzahl der Haufen Zuordnungen . Sie haben keine Ahnung, wie viel das hilft.
Aber machen wir etwas absolut klar:
Mit anderen Worten, überlegen Sie sich zweimal, bevor Sie Ihren Code ändern, der es weniger lesbar oder schwerer zu debuggen macht, nur weil Sie glauben, dass es 2,5% schneller läuft.
Für ein komfortableres Leseerlebnis finden Sie unter: https://cpp-optimizations.netlify.app
Verwenden Sie standardmäßig die Const Referenz.
Semantische Bewegung (Todo).
Rückgabewertoptimierung (TODO).
Verwenden Sie standardmäßig std :: vector <> :: Reserve
"Ich habe Linked-List an der Universität gelernt, sollte ich sie benutzen?" Nooope.
Sie brauchen keine std::map<> dafür.
Kleine Vektoroptimierung
Saiten sind (fast) Vektoren
Wenn Sie sich keine Sorgen machen: Kleine String -Optimierung.
String -Verkettung: Das falsche Sicherheitsgefühl des operator+ .
std::string_view : Liebe auf den ersten Blick (Todo).
Beispiel: 2D/3D verwandelt den richtigen Weg.
Iterieren über eine 2D -Matrix: weniger elegant, leistungsfähiger.
boost::container::flat_map . Sie werden sich nicht vorstellen, was als nächstes passiert ist.Einfacher und schnellerer Weg, um Punktwolken in PCL zu filtern.
Schneller Palindrom: Die Kosten für bedingte Zweige
Diese Arbeit ist unter CC BY-SA 4.0 lizenziert