Seminar „Effiziente Programmierung in C“
Beschreibung
In diesem Seminar geht es um konkrete Methode zum Zeitsparen beim Programmieren. Das bezieht sich sowohl auf die Zeit zum Debuggen und Weiterentwickeln, als auch auf die Laufzeit des Programms. Dabei sollen Informationen zu den verschiedenen Themen recherchiert werden, und anhand von konkreten Beispielen dargestellt werden. Es können auch die Ergebnisse kleiner vergleichender Untersuchungen zur Auswirkung verschiedener Konstrukte und Methoden gezeigt werden.
Beachten Sie auch unsere allgemeinen organisatorischen Hinweise zu Seminaren.
Zielgruppe
Das Seminar eignet sich für Studierende der Informatik in den Diplom- und Bachelorstudiengängen. Studierende anderer Studiengänge müssen die Anrechnung mit dem jeweiligen Prüfungsausschuss klären.
Interessierte Zuhörer sind auch herzlich willkommen.
Voraussetzungen
Grundkenntnisse in C, C++ oder Objective-C.
Daten der Veranstaltung
Dozenten
- Nathanael Hübbe
- Michael Kuhn
Themenliste
Die Themenliste hier gibt eine erste Übersicht über den Inhalt des Seminars, die Liste wird noch nach Absprache mit den Teilnehmern angepasst.
- Kommentierung:
- Was ist ein hilfreicher Kommentar?
- Was sollte man kommentieren?
- Was sollte man nicht kommentieren?
- Siehe auch: http://queue.acm.org/detail.cfm?id=1053354
- Umgang mit Buffern:
- Was kann man tun, um Indexfehler zu vermeiden?
- Allokation auf dem Heap ↔ Allokation auf dem Stack
- Siehe auch:
- Umgang mit Pointern:
- Wie nutzt man sie sinnvoll?
- Was sind die Performance-Aspekte?
- Und wie vermeidet man Fehler?
- Einige Stichworte: Uninitialisierte Pointer, Falsche Typen, dangling pointer, NULL pointer, Alloziierungsfehler, Aliasfehler.
- Undefined Behavior:
- Was ist Undefined Behavior?
- Wie schlägt der Compiler Kapital aus Undefined Behavior?
- Was sind die Gefahren?
- Worauf sollte man achten?
- Präprozessor:
- Was kann man damit machen?
- Wie geht das?
- Bringt es Performance?
- Und wo sind die Fallen?
- Objektorientierung in C:
- Geht das?
- Und wenn ja, wie?
- Und was ist mit “private” und “public”?
- Polymorphie in C:
- Welche Ansätze gibt es dafür?
- Lohnt sich der Aufwand?
- Was bedeuten die verschiedenen Ansätze für die Performance?
- Reference Counting:
- Was ist das?
- Was bringt es?
- Wie setzt man es ein?
- Wieviel Rechenzeit kostet es?
- Und welche Gefahren gibt es?
- Zu den Themen bezüglich Objektorientierung, siehe auch:
- Compiler-Optimierung:
- Was kann der Compiler?
- Was kann er nicht?
- Und wie nutzt man es?
- Das “restricted” Keyword:
- Was tut es?
- Wie tut es das?
- Und wie benutzt man es sinnvoll?
- “static” & “inline”:
- Was bedeutet das?
- Was bringt es?
- Und wie setzt man es sinnvoll ein?
- Die innere Schleife:
- Was ist das?
- Wie erkennt man sie?
- Und wie hilft sie bei der Optimierung?
- Caches:
- Wie funktionieren sie?
- Was bedeuten Caches für die Programmierung?
- Und wie nutzt man sie effizient?
- Indirektion:
- Welche Spielarten gibt es?
- Was bringt sie, was kostet sie?
- Wie kann man sie effizient einsetzen?
- Algorithmen:
- Algorithmenstrukturen:
- Für alle Unterthemen:
- Was ist das Grundprinzip?
- Welche Algorithmen wenden es an? (Nur ein bis drei Beispiele, aber die bitte mit ausreichend Tiefe!)
- Was sind die typischen Merkmale?
- Wann kann man es anwenden?
- Wann ist es sinnvoll?
- Teile & Herrsche
- Greedy Algorithmen
- Dynamische Programmierung
- Hashing
- Was ist ein Hashwert?
- Wie funktioniert eine Hashtabelle?
- Was bringt es, was kostet es?
- Wie benutzt man typische Bibliotheksimplementationen?
- Laufzeitkosten:
- Was ist wie teuer?
- Funktionsaufrufe
- Berechnungen
- Mathefunktionen
- if-Konstrukte
- switch-Anweisungen
- Speicherzugriffe
- Systemaufrufe
Weitere Themen können gerne vorgeschlagen werden.
Zeitplan
- 8. 11. 2012: Pointer – Alexander Lambertz 1) – Präsentation
- 22. 11. 2012: Function Pointer – Christopher Gerlach 3)
- 29. 11. 2012: Compileroptimierung – Mirko Köster 4) – Präsentation Präsentation (Druckversion) Ausarbeitung
- 13. 12. 2012: Polymorphie – Anna-Marie Costea 7)
- 20. 12. 2012: Caches – Philipp Ruppel 8)
- 24. 1. 2013: restrict – Torsten Zühlke 12)
- 31. 1. 2013: static & inline – Söhnke Kracht 13)
- 31. 1. 2013: Geschwindigkeit von Sprachelementen – Tobias Rummelt 14)
Materialien
Literaturhinweise
* http://smackerelofopinion.blogspot.de/2012/09/striving-for-better-code-quality.html
Robert C. Martin: Clean Code / A Handbook of Agile Software Craftsmanship, ISBN-13:978-0-13-235088-4
Ben Klemens: 21st Century C, ISBN-13:978-1-449-32714-9