String-Speichernutzung in Golang
Beim Optimieren eines Codes mit einem Map[string]string, dessen Werte nur „A“ oder „B“ sind " könnte die Annahme sein, dass ein Map[string]bool aufgrund seines kleineren Werttyps effizienter wäre. Tests haben jedoch ergeben, dass die Speichernutzung für beide Karten überraschend gleich ist.
unsafe.Sizeof() verstehen
Um dies zu untersuchen, ist unsafe.Sizeof() Wird zur Messung der Speichernutzung verwendet. Es ist jedoch wichtig zu beachten, dass unsafe.Sizeof() nur die „geringe“ Größe der Daten meldet. Im Fall von Karten implementiert Go diese mithilfe von Zeigern. Daher meldet unsafe.Sizeof(somemap) die Größe des Zeigers und nicht die Daten der gesamten Karte.
String-Speicherdarstellung
Strings in Go werden durch einen Header dargestellt bestehend aus einem Zeiger auf Daten und einer Länge. Der Typ „reflect.StringHeader“ definiert diese Struktur:
type StringHeader struct { Data uintptr Len int }
Daher meldet unsafe.Sizeof(somemap) nur die Größe dieses Headers, die unabhängig vom String-Wert ist.
Tatsächlicher Speicherbedarf für Karten
Um den tatsächlichen Speicherverbrauch für Karten zu ermitteln, ist es wichtig, Folgendes zu berücksichtigen Daten, auf die sie verweisen. Mit anderen Worten: len(str) int(unsafe.Sizeof(str)) liefert eine genauere Schätzung.
Zusätzliche Überlegungen
Strings in Go speichern UTF-8 Bytesequenzen im Speicher. Die Funktion len() meldet die Bytelänge, sodass die tatsächliche Speichernutzung für einen String wie folgt angenähert werden kann:
stringSize := len(str) + int(unsafe.Sizeof(str))
Es ist auch wichtig zu bedenken, dass durch das Slicing eines vorhandenen Strings ein neues Backing-Array für den Slice zugewiesen wird . Selbst wenn nicht mehr auf die ursprüngliche Zeichenfolge verwiesen wird, bleibt das Hintergrundarray im Speicher, um das Slice zu unterstützen.
Das obige ist der detaillierte Inhalt vonWarum zeigen „map[string]string' und „map[string]bool' in Go eine ähnliche Speichernutzung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!