Softwareoptimierung

Hochoptimiertes Puzzle

9. Mai 2017, 13:56 Uhr | Matthias Bauer
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

Lösung 3: Codegenerator

Listing 5
Listing 5: Code der Methode »write« mit statischer Polymorphie.
© Redlogix

Mit Hilfe von C++-Templates lässt sich genau dieser Ansatz der konfigurierbaren Einzelteile realisieren. Wie beim Lösungsansatz der dynamischen Polymorphie werden Hook-Aufrufe in eine Queue-Codeschablone eingebaut. Nun sind diese Hooks aber nicht als virtuelle Methodenaufrufe der Strategie-Klassen realisiert, sondern als Aufrufe von nicht-virtuellen inline-Methoden, die dem Compiler bereits zur Compilezeit bekannt sind und die er ohne Aufruf-Overhead direkt in den Code einbetten oder vollständig wegoptimieren kann (im Falle der leeren inline-Methoden lock und unlock bei NoSyncQueueSyncStrategy).
Listing 5 zeigt den Code der Methode write. Hier sind die Hooks Aufrufe von Methoden der Klasse Queue selbst. Damit bleibt die Frage, wie die unterschiedlichen Ausprägungen der Hook-Methoden lock, unlock und requestSpace als Methoden der Klasse Queue definiert werden: Dazu wird die Komponente Queue als C++-Klassentemplate definiert, das zur Compilezeit konfiguriert wird.

Anbieter zum Thema

zu Matchmaker+
Listing 6
Listing 6: Code des Klassentemplates Queue.
© Redlogix

Das Klassentemplate erwartet die Template-Parameter »T_SYNC_STRATEGY« und »T_MEM_STRATEGY«. Indem Queue nun von genau diesen beiden Klassen ableitet, erbt sie auch deren Methoden, also lock und unlock von der als T_SYNC_STRATEGY und requestSpace von der als T_MEM_STRATEGY angegebenen Klasse (Listing 6).
Mit dieser Lösung generiert der Compiler exakt den gleichen Maschinencode wie bei den Wunschlösungen aus den Listings 3 und 4. Das funktioniert sogar, wenn NoSyncQueue­SyncStrategy für T_SYNC_STRATEGY angegeben wird. Dann werden nämlich die Aufrufe der beiden leeren Methoden lock und unlock vom Compiler vollständig wegoptimiert.


  1. Hochoptimiertes Puzzle
  2. Lösung 2: Dynamische Polymorphie
  3. Lösung 3: Codegenerator

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Componeers GmbH

Weitere Artikel zu Betriebssysteme