Heim > Backend-Entwicklung > Golang > Wie viel Speicher reserviert eine nicht spezifizierte Go-Map?

Wie viel Speicher reserviert eine nicht spezifizierte Go-Map?

Mary-Kate Olsen
Freigeben: 2024-12-18 15:19:25
Original
584 Leute haben es durchsucht

How Much Memory Does an Unspecified Go Map Allocate?

Speicherzuweisung in Golang-Karten: Enthüllung der zugrunde liegenden Strukturen

Beim Erstellen einer Go-Karte ohne Angabe der anfänglichen Speicherzuweisung bleibt die tatsächliche Speichernutzung ein Rätsel. Dieser Artikel beleuchtet, wie der von der Implementierung zugewiesene Speicher bestimmt wird.

Einblicke aus der Go-Map-Implementierung

Wenn wir uns mit dem Quellcode des Go-Map-Typs befassen, stellen wir fest, dass eine Karte Folgendes umfasst zwei Komponenten: ein Header (hmap) und ein Array von Buckets (bmap). Bemerkenswert ist, dass ein einzelner Bucket zugewiesen wird, wenn die anfängliche Zuordnung während der Kartenerstellung nicht angegeben wird.

Struktur eines Headers (hmap)

Der Header besteht aus sieben Feldern:

  • 1 * int
  • 2 * uint8
  • 1 * uint16
  • 1 * uint32
  • 2 * unsafe.Pointer
  • 1 * uintptr

Auf 64-Bit-Maschinen ist die Größe von int, uintptr und unsafe.Pointer sind jeweils 8 Bytes groß, was insgesamt 40 Bytes für die Datei ergibt Header.

Struktur eines Buckets (bmap)

Ein Bucket ist ein Array mit acht Elementen vom Typ uint8, was zu zusätzlichen 8 Bytes führt.

Endgültige Speicherzuweisung

Der für eine Karte mit einem Bucket zugewiesene Speicher besteht also aus:

  • Header Größe: 40 Bytes
  • Bucket-Größe: 8 Bytes
  • Gesamtgröße: 48 Bytes

Diese Berechnung gilt für 64-Bit-Architekturen und die tatsächliche Größe kann variieren variieren leicht auf verschiedenen Plattformen.

Das obige ist der detaillierte Inhalt vonWie viel Speicher reserviert eine nicht spezifizierte 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