Heim >Backend-Entwicklung >Golang >Warum haben Strukturen mit identischen Feldern, aber unterschiedlicher Reihenfolge in Go unterschiedliche Größen?

Warum haben Strukturen mit identischen Feldern, aber unterschiedlicher Reihenfolge in Go unterschiedliche Größen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-26 03:29:08324Durchsuche

Why Do Structs with Identical Fields but Different Orders Have Different Sizes in Go?

Unterschiedliche Strukturgrößen mit unterschiedlicher Feldreihenfolge

Im bereitgestellten Code weisen zwei Strukturen, A und B, mit identischen Feldern, aber unterschiedlichen Feldreihenfolgen, unterschiedliche Größen auf. Hier ist der Grund:

Implizites Auffüllen

Speicherausrichtungsanforderungen für Datentypen schreiben vor, dass Adressen von Feldern ein Vielfaches spezifischer Werte sein müssen. Für int64-Felder beträgt dieses Vielfache 8 Bytes.

In Struktur A ist das erste Feld ein Bool, der 1 Byte benötigt. Um das nachfolgende int64-Feld an einer 8-Byte-Grenze auszurichten, werden nach a 7 Byte implizite Auffüllung hinzugefügt.

In Struktur B ist das erste Feld b vom Typ int64. Da es bereits ausgerichtet ist, sind nach a nur 3 Bytes implizites Auffüllen erforderlich, um das folgende int-Feld auszurichten, das 4 Bytes benötigt.

Auswirkungen auf die Größe

Aufgrund dieses impliziten Auffüllens ist die Größe von A ist 24 Bytes (1 Byte für a, 8 Bytes für b und 15 Bytes Auffüllung). Mittlerweile ist B 16 Bytes groß (1 Byte für a, 3 Bytes Auffüllung, 8 Bytes für b und 4 Bytes für c).

Zero-Size-Strukturen

Struktur C wird vollständig deklariert leer, was zu einer Größe von 0 Byte führt. Gemäß der Go-Sprachspezifikation haben Strukturen ohne Felder, die größer als Null sind, die Größe Null.

Adressierbarkeit und Speicherzuweisung

Für Werte der Größe Null ermöglicht die Sprache dieselbe Speicheradresse für verschiedene Variablen wiederverwendet werden. Das bedeutet, dass für ein := C{} tatsächlich kein Speicher vom System zugewiesen wird.

Das obige ist der detaillierte Inhalt vonWarum haben Strukturen mit identischen Feldern, aber unterschiedlicher Reihenfolge in Go unterschiedliche Größen?. 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