0 Tage Serie
c / intermediate
Snippet

Strukturelles Padding und offsetof

Compiler fügen 'Padding'-Bytes zwischen Struktur-Membern ein, um sicherzustellen, dass sie aus Performancegründen an Speichergrenzen ausgerichtet sind. Das Makro 'offsetof' aus 'stddef.h' ermöglicht es, den genauen Byte-Offset eines Members innerhalb der Struktur zu sehen.

snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stddef.h>
struct Data {
char a;
int b;
char c;
};
int main() {
printf("Size of struct: %zu\n", sizeof(struct Data));
printf("Offset of b: %zu\n", offsetof(struct Data, b));
printf("Offset of c: %zu\n", offsetof(struct Data, c));
return 0;
}
Erklärung
1
struct Data { ... };
Eine Struktur, bei der Ausrichtungsanforderungen wahrscheinlich dazu führen, dass die Gesamtgröße größer ist als die Summe ihrer Teile.
2
offsetof(struct Data, b)
Gibt die Anzahl der Bytes vom Anfang der Struktur bis zum Member 'b' zurück.