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

Zeit Donnerstag, 10–12 Uhr
Ort DKRZ, Raum 034
Beginn 18.10.2012
Vorbesprechung 18.10.2012, 10–12 Uhr
Mailingliste EPC-1213

Dozenten

Themenliste

Die Themenliste hier gibt eine erste Übersicht über den Inhalt des Seminars, die Liste wird noch nach Absprache mit den Teilnehmern angepasst.

  • 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

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

1) , 9) , 14)
Nathanael Hübbe
2) , 5) , 6) , 11)
Michael Kuhn
3) , 7) , 8) , 13)
Konstantinos Chasapis
4) , 10) , 12)
Julian Kunkel