Bei der Arbeit mit Go-Maps ist es oft nützlich, eine Schätzung des von ihnen belegten Speichers zu haben. Während in der Dokumentation angegeben ist, dass die anfängliche Speicherzuweisung von der Implementierung abhängt, erfahren Sie hier, wie Sie dies ermitteln können:
Go-Karten basieren auf zwei Typen: hmap (Header) und bmap (Bucket-Array). Eine Untersuchung des Quellcodes zeigt, dass, wenn kein anfängliches Leerzeichen angegeben wird (foo := make(map[string]int)), nur ein einzelner Bucket innerhalb der Karte erstellt wird.
Der Kartenkopf selbst enthält mehrere Felder:
Unter der Annahme einer 64-Bit-Architektur beträgt die Größe von int, uintptr und unsafe.Pointer jeweils 8 Bytes. Dies ergibt eine Header-Größe von:
1 * 8 + 1 * 1 + 1 * 2 + 1 * 4 + 2 * 8 + 1 * 8 = 40 bytes
Jeder Bucket in einer Map ist ein Array von acht uint8-Werten, wodurch weitere 8 Bytes hinzugefügt werden:
8 * 1 = 8 bytes
Wenn wir die Header- und Bucket-Größen addieren, erhalten wir einen Gesamtspeicherverbrauch von:
40 + 8 = 48 bytes (64-bit architecture)
Diese Schätzung kann verwendet werden, um die Speichernutzung einer neu erstellten Go-Karte ohne Angabe des anfänglichen Speicherplatzes anzunähern.
Das obige ist der detaillierte Inhalt vonWie viel Speicher verbraucht eine neu erstellte Go-Map?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!