cpp / expert
Snippet
Daten-Packing auf Bitebene
Nutzung von Bitfeldern und Alignment-Spezifizierern zur Definition exakter Datenlayouts. Dies ist entscheidend für die Performance in der Systemprogrammierung, wenn Strukturen exakt den Hardwarespezifikationen entsprechen müssen, ohne dass der Compiler Padding einfügt.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct alignas(16) HardwareRegister {uint32_t enabled : 1;uint32_t mode : 3;uint32_t parity : 1;uint32_t reserved: 27;float threshold;static_assert(sizeof(HardwareRegister) == 16, "Padding detected!");};void configure(HardwareRegister* reg) {reg->enabled = 1;reg->mode = 0b101;reg->threshold = 42.5f;}
Erklärung
1
uint32_t enabled : 1;
Definiert ein Element, das genau 1 Bit innerhalb des 32-Bit-Ganzzahlblocks einnimmt.
2
alignas(16) struct HardwareRegister
Zwingt die Struktur, an einer 16-Byte-Speichergrenze zu beginnen, was oft für SIMD-Instruktionen erforderlich ist.