cpp / expert
Snippet
Optimierung des sequentiellen Zugriffs durch Schleifen-Verschachtelung
Duff's Device ist eine klassische Experten-Technik für das 'Loop Unrolling'. Sie kombiniert eine Switch-Anweisung mit einer Do-While-Schleife, um den Overhead von Sprungbefehlen und Bedingungsprüfungen zu reduzieren. Während moderne Compiler einfache Schleifen oft selbst entrollen, bleibt dieses manuelle Muster in speziellen Low-Level-Optimierungen relevant.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void fast_copy(int* __restrict dest, const int* __restrict src, size_t count) {size_t n = (count + 7) / 8;switch (count % 8) {case 0: do { *dest++ = *src++;case 7: *dest++ = *src++;case 6: *dest++ = *src++;case 5: *dest++ = *src++;case 4: *dest++ = *src++;case 3: *dest++ = *src++;case 2: *dest++ = *src++;case 1: *dest++ = *src++;} while (--n > 0);}}
Erklärung
1
switch (count % 8)
Behandelt die 'Rest-Elemente', bevor der Haupt-Schleifenblock betreten wird.
2
case 0: do { ... } while (--n > 0);
Erzeugt einen Fall-Through-Mechanismus, der direkt in den Schleifenkörper springt.