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.
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.
Der Header besteht aus sieben Feldern:
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.
Ein Bucket ist ein Array mit acht Elementen vom Typ uint8, was zu zusätzlichen 8 Bytes führt.
Der für eine Karte mit einem Bucket zugewiesene Speicher besteht also aus:
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!