Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Hallo. Mein Name ist Kurt und ich bin ein Code-Fanatiker.

Ich schreibe schon seit über 35 Jahren Software. Ich habe nie bei Microsoft, Google, Facebook, Apple oder einem anderen berühmten Unternehmen gearbeitet. Aber abgesehen von ein paar kurzen Urlauben habe ich in dieser Zeit jeden Tag Code geschrieben. Die letzten 20 Jahre habe ich fast ausschließlich damit verbracht, C++ zu schreiben und mit anderen sehr klugen Entwicklern über C++ zu sprechen. Das ist meine Qualifikation, um ein Buch über die Optimierung von C++-Code zu schreiben. Ich habe auch eine Menge englischer Prosa geschrieben, darunter Spezifikationen, Kommentare, Handbücher, Notizen und Blogbeiträge. Es hat mich immer wieder erstaunt, dass nur die Hälfte der intelligenten, kompetenten Entwickler, mit denen ich zusammengearbeitet habe, zwei grammatikalische englische Sätze aneinanderreihen können.

Eines meiner Lieblingszitate stammt aus einem Brief von Sir Isaac Newton, in dem er schreibt: "Wenn ich weiter gesehen habe, dann, weil ich auf den Schultern von Giganten stand. Auch ich habe auf den Schultern von Giganten gestanden und vor allem ihre Bücher gelesen: elegante kleine Bücher wie The C Programming Language von Brian Kernighan und Dennis Ritchie; kluge Bücher, die der Zeit voraus sind, wie die Effective C++-Reihe von Scott Meyers; herausfordernde, bewusstseinserweiternde Bücher wie Modern C++ Design von Andrei Alexandrescu; sorgfältige, präzise Bücher wie The Annotated C++ Reference Manual von Bjarne Stroustrup und Margaret Ellis. Die meiste Zeit meines Berufslebens kam es mir nie in den Sinn, dass ich eines Tages ein Buch schreiben könnte. Dann, eines Tages, stellte ich plötzlich fest, dass ich dieses Buch schreiben musste.

Warum also ein Buch über Leistungstuning in C++ schreiben?

Zu Beginn des21. Jahrhunderts stand C++ unter Beschuss. Fans von C wiesen auf C++-Programme hin, deren Leistung schlechter war als der angeblich gleichwertige Code in C. Berühmte Unternehmen mit großen Marketingbudgets warben für proprietäre objektorientierte Sprachen und behaupteten, C++ sei zu schwer zu bedienen und ihre Tools seien die Zukunft. Die Universitäten entschieden sich für Java, weil es eine kostenlose Toolchain enthielt. Aufgrund dieser Begeisterung setzten große Unternehmen viel Geld auf die Programmierung von Websites und Betriebssystemen in Java, C# oder PHP. C++ schien auf dem absteigenden Ast zu sein. Es war eine unangenehme Zeit für alle, die glaubten, dass C++ ein mächtiges, nützliches Werkzeug ist.

Dann passierte etwas Seltsames. Die Prozessorkerne wurden nicht mehr schneller, aber die Arbeitslast wuchs weiter. Dieselben Unternehmen begannen, C++-Programmierer einzustellen, um ihre Skalierungsprobleme zu lösen. Die Kosten für das Neuschreiben von Code in C++ wurden geringer als die Kosten für den Strom in ihren Rechenzentren. Plötzlich war C++ wieder populär.

Einzigartig unter den Programmiersprachen, die Anfang 2016 weit verbreitet sind, bietet C++ Entwicklern ein Kontinuum an Implementierungsmöglichkeiten, das von automatischer Unterstützung bis hin zu feiner manueller Kontrolle reicht. C++ ermöglicht es Entwicklern, die Kontrolle über Kompromisse bei der Leistung zu übernehmen. Diese Kontrolle macht eine Optimierung möglich.

Es gibt nicht viele Bücher über die Optimierung von C++-Code. Eines der wenigen ist Bulka und Mayhews akribisch recherchiertes, aber inzwischen etwas veraltetes Optimizing C++. Die Autoren scheinen ähnliche berufliche Erfahrungen gemacht zu haben wie ich und haben viele der gleichen Prinzipien entdeckt. Für Leser, die an einer anderen Sichtweise auf die Themen in diesem Buch interessiert sind, ist ihr Buch eine gute Anlaufstelle. Außerdem behandelt Scott Meyers, neben vielen anderen, die Konstruktion von Kopien ausführlich und gut.

Es gibt genug verschiedene Dinge, die man über Optimierung wissen sollte, um 10 Bücher zu füllen. Ich habe versucht, die Dinge auszuwählen, die bei meiner eigenen Arbeit häufig vorkamen oder die die größten Leistungsgewinne brachten. Den vielen Leserinnen und Lesern, die ihre eigenen Erfahrungen mit der Leistungsoptimierung haben und sich vielleicht fragen, warum ich nichts über Strategien erzählt habe, die bei ihnen Wunder gewirkt haben, kann ich nur sagen: So wenig Zeit, so viel zu erzählen.

Ich freue mich über deine Fehler, Kommentare und bevorzugten Optimierungsstrategien unter antelope_book@guntheroth.com.

Ich liebe das Handwerk der Softwareentwicklung. Ich genieße es, die Kata für jede neue Schleife oder Schnittstelle endlos zu üben. An der Ecke von Sonnet und Science ist das Schreiben von Code eine so esoterische Fähigkeit, eine Kunstform, die so verinnerlicht ist, dass fast niemand außer einem anderen Praktiker sie zu schätzen weiß. Die Schönheit einer elegant programmierten Funktion und die Weisheit eines gut genutzten Idioms sind unübersehbar. Doch leider gibt es für jedes epische Software-Gedicht wie Stepanovs Standard Template Library 10.000 düstere Bände mit uninspiriertem Code.

Der eigentliche Zweck dieses Buches ist es, jedem Leser die Erlaubnis zu geben, ein wenig mehr über die Schönheit einer gut abgestimmten Software nachzudenken. Nimm es und renne damit. Sieh weiter!

Entschuldigung für den Code in diesem Buch

Obwohl ich seit über 20 Jahren C++-Code schreibe und optimiere, wurde der Großteil des Codes in diesem Buch speziell für dieses Buch entwickelt. Wie jeder neue Code enthält er sicherlich Fehler. Dafür möchte ich mich entschuldigen.

Ich habe im Laufe der Jahre für Windows, Linux und verschiedene eingebettete Systeme entwickelt. Der in diesem Buch vorgestellte Code wurde unter Windows entwickelt. Der Code und das Buch sind zweifellos Windows-lastig. Die Lektionen zur Optimierung von C++-Code, die anhand von Visual Studio unter Windows veranschaulicht werden, gelten gleichermaßen für Linux, Mac OS X oder jede andere C++-Umgebung. Die genauen Zeiten der verschiedenen Optimierungen hängen jedoch von der Implementierung des Compilers und der Standardbibliothek sowie von dem Prozessor ab, auf dem der Code getestet wird. Optimierung ist eine experimentelle Wissenschaft. Wenn du dich auf Optimierungsempfehlungen verlässt, kann es zu negativen Überraschungen kommen.

Ich bin mir bewusst, dass die Kompatibilität mit verschiedenen anderen Compilern und mit anderen Unix- und Embedded-Systemen eine Herausforderung sein kann, und ich entschuldige mich, wenn der Code auf deinem Lieblingssystem nicht kompiliert werden kann. Da es in diesem Buch nicht um systemübergreifende Kompatibilität geht, habe ich mich darauf beschränkt, einfachen Code zu präsentieren.

Der hier gezeigte Einrückungsstil mit geschweiften Klammern ist nicht mein Favorit:

if (bool_condition) {
    controlled_statement();
}

Da sie jedoch den Vorteil hat, dass sie so viele Zeilen wie möglich auf die gedruckte Seite bringt, habe ich mich entschieden, sie für die Beispiele in diesem Buch zu verwenden.

Code-Beispiele verwenden

Zusätzliches Material (Code-Beispiele, Musterlösungen usw.) steht unter www.guntheroth.com zum Download bereit .

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Wenn du eine CD-ROM mit Beispielen aus den O'Reilly-Büchern verkaufst oder verteilst, ist eine Genehmigung erforderlich. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Erlaubnis erforderlich.

Wir freuen uns über eine Namensnennung, verlangen sie aber nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Optimized C++ von Kurt Guntheroth (O'Reilly). Copyright 2016 Kurt Guntheroth, 978-1-491-92206-4."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

In diesem Buch verwendete Konventionen

In diesem Buch werden die folgenden typografischen Konventionen verwendet:

Klartext

Wird für Menütitel, Menüoptionen, Menütasten und Tastaturbeschleuniger (wie Alt und Control) verwendet.

Kursiv

Weist auf neue Begriffe, URLs, E-Mail-Adressen, Pfadnamen, Dateinamen und Dateierweiterungen hin.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Get Optimiertes C++ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.