Heim > Backend-Entwicklung > Golang > Wie viel Speicher verbraucht eine neu erstellte Go-Map?

Wie viel Speicher verbraucht eine neu erstellte Go-Map?

Linda Hamilton
Freigeben: 2024-12-06 04:36:19
Original
678 Leute haben es durchsucht

How Much Memory Does a Newly Created Go Map Consume?

Schätzung des für Go-Maps reservierten Speichers

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:

Inspizieren des Kartenquellcodes

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.

Aufschlüsselung eines Kartenkopfes

Der Kartenkopf selbst enthält mehrere Felder:

  1. int (Größe der Bmap Array)
  2. uint8 (Bucket-Anzahl)
  3. uint16 (Überlauf-Bucket-Anzahl)
  4. uint32 (Mindestschwellenwert vor dem Erweitern der Karte)
  5. Zwei unsichere Zeiger ( für Elemente und Zeigertasten)
  6. uintptr (unbenutzt Feld)

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
Nach dem Login kopieren

Bucket-Struktur

Jeder Bucket in einer Map ist ein Array von acht uint8-Werten, wodurch weitere 8 Bytes hinzugefügt werden:

8 * 1 = 8 bytes
Nach dem Login kopieren

Gesamtspeicherverbrauch

Wenn wir die Header- und Bucket-Größen addieren, erhalten wir einen Gesamtspeicherverbrauch von:

40 + 8 = 48 bytes (64-bit architecture)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage