capypad
0 Tage Serie
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
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.