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
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.