Heim >Backend-Entwicklung >Golang >Warum haben Strukturen mit identischen Feldern, aber unterschiedlicher Reihenfolge in Go unterschiedliche Größen?
Im bereitgestellten Code weisen zwei Strukturen, A und B, mit identischen Feldern, aber unterschiedlichen Feldreihenfolgen, unterschiedliche Größen auf. Hier ist der Grund:
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.
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).
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.
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!