Heim >Backend-Entwicklung >Golang >Warum führen unterschiedliche Feldreihenfolgen in Go-Strukturen zu unterschiedlichen Größen?

Warum führen unterschiedliche Feldreihenfolgen in Go-Strukturen zu unterschiedlichen Größen?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 01:36:10470Durchsuche

Why Do Different Field Orders in Go Structs Result in Varying Sizes?

Struktur hat eine andere Größe, wenn die Feldreihenfolge unterschiedlich ist

1. Strukturgrößen

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.

2. Null-Größenwerte

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!

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