Überlegungen zur Speichereffizienz: Leere Schnittstelle vs. leere Struktur in Karten
Man kann sich über den Unterschied zwischen der Verwendung einer leeren Schnittstelle und einer leeren Schnittstelle wundern struct als Wert in einer Karte, wenn Sie versuchen, eine Menge in Go zu emulieren. Schauen wir uns die Unterschiede in der Speichernutzung an, die sich aus dieser Wahl ergeben.
Berücksichtigen Sie die folgenden Typen:
type MyType uint8
Um einen Satz zu simulieren, könnte man das folgende Konstrukt verwenden:
map[MyType]interface{}
Es ist jedoch erwähnenswert, dass man stattdessen auch eine leere Struktur verwenden kann:
map[MyType]struct{}
Der Hauptvorteil Der Vorteil der Verwendung einer leeren Struktur liegt in der geringeren Speichernutzung im Vergleich zu einer leeren Schnittstelle. Das folgende Beispiel zeigt diesen Unterschied:
package main import ( "fmt" "unsafe" ) func main() { var s struct{} fmt.Println(unsafe.Sizeof(s)) var i interface{} fmt.Println(unsafe.Sizeof(i)) }
Ausgabe (Bytes für 32-Bit-Architektur):
0 8
Ausgabe (Bytes für 64-Bit-Architektur):
0 16
Wie die Ergebnisse zeigen, belegt eine leere Struktur null Bytes Speicher, während eine leere Schnittstelle entweder 8 oder 16 Bytes belegt abhängig von der Architektur.
Wenn daher die Speichereffizienz eine entscheidende Überlegung ist, ist die Entscheidung für eine leere Struktur als Wert in Ihrer Karte eine kluge Wahl.
Das obige ist der detaillierte Inhalt vonLeere Struktur vs. leere Schnittstelle in Go Maps: Was ist speichereffizienter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!