Heim  >  Artikel  >  Backend-Entwicklung  >  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?

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
Linda HamiltonOriginal
2024-10-26 13:53:02579Durchsuche

 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>

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>

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!

Stellungnahme:
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