Das hat mit alignment zu tun. Jeder bestimmte Typ (Byte, Ganzzahl, usw.) kann nur mit einem Offset beginnen, der ein Vielfaches seiner Standardgröße ist.
A Bytekette s
auf jeder Offset beginnen kann, weil seine Standardgröße 1.
ist, aber eine 32-Bit-Ganzzahl i
kann nur bei einem mit einem Vielfachen von 4 (seine Größe Offset beginnen). Z. B. 0, 4, 8, 12, usw.
Also, die struct 10siii
Lassen Sie uns zunächst sezieren die 10-Byte-String zu analysieren.
Offset: 0 1 2 3 4 5 6 7 8 9
s----------------->
10s
nimmt die ersten 10 Bytes, die bis zu erwarten ist. Jetzt folgt die 3 ganze Zahlen.
1 1 1 1 1 1 1 1 1 1 2 2 2 2
Offset: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
s-----------------> x x i-----> i-----> i----->
jede ganze Zahl umfasst 4 Bytes, aber jeder ist auf einer nur beginnen Offset, das ist ein Vielfaches von 4 (d, 8, 12, 16, 20, nicht mehr als 10). Da die Anfangs-Byte-Zeichenfolge 10 Byte belegt, muss sie um 2 Byte aufgefüllt werden, damit die Ganzzahlen einen korrekten Offset haben. Und so enden Sie mit einer Gesamtstrukturgröße bestehend aus: 10 (Anfangsbytezeichenfolge) + 2 (Auffüllung) + 12 (3 Ganzzahlen) = 24 Bytestruktur.