Zusammenfassung: Abhängig von der Reihenfolge der Felder in einer Struktur werden unterschiedliche implizite Auffüllungen hinzugefügt, was sich auf deren Größe auswirkt.
Unterschiedliche Architekturen erfordern unterschiedliche Ausrichtungen für den Speicher Adressen. Im bereitgestellten Code wird beispielsweise davon ausgegangen, dass die Zielarchitektur 386 ist, wobei die Ausrichtung von int64 8 Bytes beträgt.
Da in Struktur A das erste Feld bool ist, gibt es eine implizite Auffüllung von 7 Bytes nach A.a, um sicherzustellen, dass A.b, das vom Typ int64 ist, an einer 8-Byte-ausgerichteten Adresse beginnt. Diese Auffüllung ist notwendig, da die Struktur selbst auf 8 Bytes ausgerichtet ist.
In Struktur B gibt es jedoch nur eine implizite 3-Byte-Auffüllung nach B.a, da darauf ein Feld vom Typ int folgt (das hat eine Größe von 4 Bytes) und nicht int64.
Die Spezifikation für Go besagt, dass ein Struktur- oder Array-Typ die Größe Null hat, wenn er keine Felder oder Elemente enthält, die eine Größe größer als Null haben.
Das bedeutet, dass eindeutige Null- Größenvariablen können dieselbe Adresse im Speicher haben. Aktuelle Implementierungen folgen dieser Regel, sodass kein Speicher für Werte von Typen mit einer Größe von Null zugewiesen wird, einschließlich der leeren Struktur struct{} und Arrays mit einer Länge von Null.
Im bereitgestellten Code ist beispielsweise C eine Struktur der Größe Null. Infolgedessen wird für Instanzen von C kein Speicher zugewiesen.
Das obige ist der detaillierte Inhalt vonWarum führen unterschiedliche Feldreihenfolgen in Go-Strukturen zu unterschiedlichen Größen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!