Heim >Backend-Entwicklung >Golang >Wie viel Speicher reserviert eine Go-Map zunächst?

Wie viel Speicher reserviert eine Go-Map zunächst?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 19:13:14482Durchsuche

How Much Memory Does a Go Map Initially Reserve?

Wie viel Speicher reservieren Go-Karten?

In Go werden Karten dynamisch zugewiesen, wobei die anfängliche Kapazität nicht angegeben wird. Dies bedeutet, dass die Speicherzuweisung implementierungsspezifisch ist. Um die anfängliche Speicherzuordnung zu bestimmen, konsultieren Sie die interne Struktur der Karte.

Kartenstruktur

Eine Karte besteht aus einem Header (Typ hmap) und einem Array von Buckets (Typ bmap). Bei der Erstellung ohne anfängliche Kapazität wird ein einzelner Bucket zugewiesen.

Struktur und Größe des Headers

Der Header besteht aus:

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

Die Größe von int, uintptr und unsafe.Pointer entspricht der Wortgröße (8 Bytes auf 64-Bit-Maschinen). Daher beträgt die Headergröße 40 Byte.

Bucket-Struktur und -Größe

Jeder Bucket enthält ein Array von 8 * uint8. Wenn wir dies zur Header-Größe addieren, erhalten wir die gesamte anfängliche Speicherzuordnung:

Header Size (40 bytes) + Bucket Size (8 bytes) = **48 bytes (64-bit architecture)**

Das obige ist der detaillierte Inhalt vonWie viel Speicher reserviert eine Go-Map zunächst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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