Ein Pointer-Cast funktioniert bei -O0 und bricht still bei -O2

Type Punning in C and C++

Type Punning – das Interpretieren von Speicher als verschiedene Typen – ist für Serialisierung und Hardware-Zugriffe unverzichtbar, aber Pointer-Casts sind in C und C++ undefiniertes Verhalten. Der Artikel zeigt, warum Compiler bei -O2 Code unter Strict-Aliasing-Annahmen wegoptimieren, und empfiehlt union oder memcpy als sichere Alternativen.

Ein Pointer-Cast funktioniert in der Praxis, bis er es nicht mehr tut. Und „tut es nicht mehr“ bedeutet, dass der Compiler den Code still wegoptimiert, von dem du dachtest, dass er ausgeführt wird.

Mehr von diesem Tag

2026-09-22