Heim > Backend-Entwicklung > C++ > Hauptteil

Warum hat eine C-Struktur mit 3 kurzen Ganzzahlen eine Größe von 6 Bytes, eine ähnliche Struktur mit einer hinzugefügten Ganzzahl jedoch eine Größe von 12 Bytes?

Linda Hamilton
Freigeben: 2024-10-26 13:53:02
Original
578 Leute haben es durchsucht

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

Speicherausrichtung in C-Strukturen

In der Informatik bezieht sich Speicherausrichtung auf die Einschränkungen, die den Adressen auferlegt werden, an denen Daten im Speicher gespeichert werden können . Das Verständnis der Speicherausrichtung ist entscheidend für die Optimierung der Codeleistung und die Vermeidung unerwarteten Verhaltens.

Problemstellung:

Sie arbeiten auf einem 32-Bit-System, bei dem die Speicherausrichtung normalerweise erfolgt auf 4 Bytes eingestellt. Betrachten Sie die folgende Struktur:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;</code>
Nach dem Login kopieren

Die Struktur enthält drei 2-Byte-Felder, aber die Verwendung des sizeof-Operators gibt 6 Bytes statt der erwarteten 8 Bytes zurück. Umgekehrt gibt die folgende Struktur:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;</code>
Nach dem Login kopieren

eine Größe von 12 Bytes zurück, wie aufgrund der erhöhten Anzahl von Feldern und der Möglichkeit zum Auffüllen zu erwarten ist. Warum gibt es einen Unterschied in den resultierenden Größen?

Erklärung:

Auf den meisten Maschinen sind Datentypen an einer Grenze ausgerichtet, die nicht größer als ihre Größe ist. In diesem Fall beträgt short 2 Bytes und int 4 Bytes.

  • Erste Struktur:

    • Da alle Mitglieder 2 sind Bytes wird die Struktur an einer 2-Byte-Grenze ausgerichtet.
    • Zwischen den Mitgliedern wird kein Abstand eingefügt, was zu einer Gesamtgröße von 6 Bytes führt.
  • Zweite Struktur:

    • Das Vorhandensein eines 4-Byte-Ints erfordert, dass die Struktur an einer 4-Byte-Grenze ausgerichtet ist.
    • 2 Bytes Auffüllung sind zwischen v3 und i eingefügt, um eine ordnungsgemäße Ausrichtung sicherzustellen, wodurch sich die Gesamtgröße auf 12 Bytes erhöht.

Das obige ist der detaillierte Inhalt vonWarum hat eine C-Struktur mit 3 kurzen Ganzzahlen eine Größe von 6 Bytes, eine ähnliche Struktur mit einer hinzugefügten Ganzzahl jedoch eine Größe von 12 Bytes?. 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!