c / expert
Snippet
Flexible Array-Member (C99)
Ein flexibles Array-Member ist eine Array-Deklaration ohne Größe am Ende einer Struktur. Es ermöglicht eine einzige zusammenhängende Speicherreservierung sowohl für die Metadaten (Header) als auch für die Nutzlast (Daten). Dies vermeidet die doppelte Zeiger-Indirektion, vereinfacht die Speicherverwaltung und verbessert die Cache-Lokalität erheblich.
snippet.c
1
2
3
4
5
6
7
8
struct Packet {int header_id;size_t length;unsigned char data[]; // Flexible array member};struct Packet *p = malloc(sizeof(struct Packet) + 1024);p->length = 1024;
Erklärung
1
unsigned char data[];
Deklariert ein Array ohne feste Größe; es muss das letzte Member der Struktur sein.
2
malloc(sizeof(struct Packet) + 1024)
Reserviert Platz für die Struktur-Member plus zusätzlichen Platz für das 'data'-Array.