Maison >développement back-end >Golang >Quelle quantité de mémoire une carte Go non spécifiée alloue-t-elle ?

Quelle quantité de mémoire une carte Go non spécifiée alloue-t-elle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 15:19:25575parcourir

How Much Memory Does an Unspecified Go Map Allocate?

Allocation de mémoire dans les cartes Golang : dévoilement des structures sous-jacentes

Lors de la création d'une carte Go sans spécifier l'allocation de mémoire initiale, l'utilisation réelle de la mémoire reste un mystère. Cet article met en lumière comment déterminer la mémoire allouée par l'implémentation.

Aperçu de l'implémentation de Go Map

En fouillant dans le code source du type de carte Go, nous découvrons qu'une carte comprend deux composants : un en-tête (hmap) et un tableau de buckets (bmap). Remarquablement, un seul bucket est alloué si l'allocation initiale n'est pas spécifiée lors de la création de la carte.

Structure d'un en-tête (hmap)

L'en-tête se compose de sept champs :

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

Sur les machines 64 bits, la taille de int, uintptr et unsafe.Pointer font 8 octets chacun, ce qui donne un total de 40 octets pour l'en-tête.

Structure d'un bucket (bmap)

Un bucket est un tableau avec huit éléments de type uint8, ce qui donne 8 octets supplémentaires.

Allocation finale de mémoire

Ainsi, la mémoire allouée pour une carte avec un bucket est constituée de :

  • Taille de l'en-tête : 40 octets
  • Taille du bucket : 8 octets
  • Taille totale : 48 octets

Ce calcul est applicable aux architectures 64 bits, et la taille réelle peut varier légèrement selon les plates-formes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn