Heim > Backend-Entwicklung > C++ > Hauptteil

Warum gibt „sizeof(myStruct)' 6 Bytes statt 8 Bytes für eine Struktur mit drei „unsigned short'-Mitgliedern zurück?

Susan Sarandon
Freigeben: 2024-10-26 19:17:02
Original
691 Leute haben es durchsucht

Why does `sizeof(myStruct)` return 6 bytes instead of 8 bytes for a struct with three `unsigned short` members?

Speicherausrichtung in C-Strukturen: Größenunterschiede verstehen

Bei der Arbeit mit C-Strukturen spielt die Speicherausrichtung eine entscheidende Rolle bei der Bestimmung der tatsächlichen Größe Größe der Struktur im Speicher. Unter Speicherausrichtung versteht man die Platzierung von Datenstrukturen in Speicheradressen, die durch bestimmte Grenzen teilbar sind. Dies gewährleistet einen effizienten Datenzugriff und eine Leistungsoptimierung.

Stellen Sie sich einen 32-Bit-Computer vor, bei dem die Speicherausrichtung normalerweise auf 4 Bytes eingestellt ist. In diesem Zusammenhang eine Struktur, die aus mehreren vorzeichenlosen kurzen Mitgliedern besteht, wie zum Beispiel:

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;
Nach dem Login kopieren

Man würde erwarten, dass die Speichergröße dieser Struktur 8 Bytes (3 x 2 Bytes) beträgt. Der Operator sizeof(myStruct) gibt jedoch nur 6 Bytes zurück. Diese Diskrepanz kann auf die Ausrichtungsanforderung zurückgeführt werden.

Im ersten Beispiel belegt jedes kurze Mitglied 2 Bytes. Da die Ausrichtungsgrenze 4 Byte beträgt, wird zwischen den Elementen kein Abstand eingefügt. Somit bleibt die Gesamtgröße bei 6 Bytes.

Im Gegensatz dazu ändert die Einführung eines int-Mitglieds in die Struktur, wie unten gezeigt, das Ausrichtungsverhalten:

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;
Nach dem Login kopieren

In diesem Fall wird die Das int-Mitglied erfordert eine 4-Byte-Ausrichtungsgrenze. Um sicherzustellen, dass diese Anforderung erfüllt wird, werden 2 Bytes Füllmaterial zwischen dem letzten unsigned short-Element (v3) und dem int-Element (i) eingefügt. Daraus ergibt sich eine Gesamtgröße von 12 Bytes (6 Bytes Daten in Shorts, 2 Bytes Padding und 4 Bytes Daten in Int).

Daher ergibt sich der Unterschied in der Speichergröße zwischen den beiden Strukturen die Ausrichtungsanforderungen ihrer Mitgliedstypen. In der ersten Struktur wird die Ausrichtungsgrenze durch die kurzen Elemente selbst erreicht, während in der zweiten Struktur zusätzliche Polsterung erforderlich ist, um die Ausrichtungsgrenze des int-Elements zu erfüllen.

Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof(myStruct)' 6 Bytes statt 8 Bytes für eine Struktur mit drei „unsigned short'-Mitgliedern zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!