C: Datenstrukturausrichtung

Ich arbeite mit Strukturen und habe einige Fragen dazu. Soweit ich weiß, werden Strukturvariablen nacheinander im Speicher abgelegt. Die Länge der Blöcke (Wörter) hängt von der Maschinenarchitektur ab (32 Bit - 4 Byte, 64 Bit - 8 Byte).

Nehmen wir an, wir haben 2 Datenstrukturen:

struct ST1 {
    char c1;
    short s;
    char c2;
    double d;
    int i;
};

In Erinnerung wird es sein:

32 bit - 20 bytes    
 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
------------------------------------------------------------------------------------------
 c1| PB| s | s | c1| PB| PB| PB| d | d | d  | d  | d  | d  | d  | d  | i  | i  | i  | i  |

64 bit - 24 bytes    | 20 | 21 | 22 | 23 |
previous sequence +  ---------------------
                     | PB | PB | PB | PB |

Wir können es jedoch neu anordnen, damit diese Daten in das Maschinenwort passen. So was:

struct ST2 {
    double d;
    int i;
    short s;
    char c1;
    char c2;
};

In diesem Fall wird es für 32 und 64 Bit auf die gleiche Weise dargestellt (16 Bytes):

 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
----------------------------------------------------------------------
 d | d | d | d | d | d | d | d | i | i | i  | i  | s  | s  | ch1| ch2|

Ich habe ein paar Fragen:

Es ist wie eine wilde Vermutung, aber die Hauptregel fürstruct ist es, Variablen mit größerer Größe am Anfang zu definieren?Soweit ich weiß, funktioniert es nicht mit eigenständigen Variablen. Mögenchar str[] = "Hello";?Füllbyte, welchen Code hat es? Liegt es irgendwo am ASCII-Tisch? Entschuldigung, konnte es nicht finden.2 Strukturen, bei denen alle Mitglieder durch unterschiedliche Adressen im Speicher vertreten sind und die nicht nacheinander im Speicher abgelegt werden können?Eine solche Struktur:struct ST3 { char c1; char c2; char c3;} st3; Hatsize = 3Ich verstehe, dass, wenn wir ein Mitglied mit einem anderen Typ hinzufügen, es ausgerichtet wird. Aber warum ist es nicht davor ausgerichtet?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage