Heim >Backend-Entwicklung >Golang >Leere Struktur vs. leere Schnittstelle in Go Maps: Was ist speichereffizienter?

Leere Struktur vs. leere Schnittstelle in Go Maps: Was ist speichereffizienter?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 19:34:10998Durchsuche

Empty Struct vs. Empty Interface in Go Maps: Which is More Memory Efficient?

Ü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!

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