c / intermediate
Snippet
Bitfelder zur Speicheroptimierung
Bitfelder ermöglichen es, die genaue Anzahl der von Strukturmitgliedern verwendeten Bits anzugeben. Dies ist hocheffizient zum Speichern von Flags oder kleinen Ganzzahlen, bei denen vollständige Typen wie 'int' (32 Bit) verschwenderisch wären. Der Compiler packt diese Felder in eine einzige zugrunde liegende Speichereinheit.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>struct Status {unsigned int isActive : 1;unsigned int errorCount : 3;unsigned int mode : 4;};int main() {struct Status s = {1, 5, 10};printf("Size: %zu bytes\n", sizeof(s));printf("Active: %u, Errors: %u, Mode: %u\n", s.isActive, s.errorCount, s.mode);return 0;}
Erklärung
1
unsigned int isActive : 1;
Reserviert genau 1 Bit für dieses Mitglied (0 oder 1).
2
unsigned int errorCount : 3;
Reserviert 3 Bits, was Werte von 0 bis 7 ermöglicht.
3
unsigned int mode : 4;
Reserviert 4 Bits, was Werte von 0 bis 15 ermöglicht.