Maison >développement back-end >Golang >Quelle quantité de mémoire une Go Map réserve-t-elle initialement ?

Quelle quantité de mémoire une Go Map réserve-t-elle initialement ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 19:13:14506parcourir

How Much Memory Does a Go Map Initially Reserve?

Quelle quantité de mémoire les cartes Go Maps réservent-elles ?

Dans Go, les cartes sont allouées dynamiquement, la capacité initiale restant non spécifiée. Cela signifie que l'allocation de mémoire est spécifique à l'implémentation. Pour déterminer l'allocation de mémoire initiale, consultez la structure interne de la carte.

Structure de la carte

Une carte se compose d'un en-tête (type hmap) et d'un tableau de buckets (type bmap). Lorsqu'il est créé sans capacité initiale, un seul bucket est alloué.

Structure et taille de l'en-tête

L'en-tête comprend :

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

La taille de int, uintptr et unsafe.Pointer est égal à la taille du mot (8 octets sur les machines 64 bits). Par conséquent, la taille de l'en-tête est de 40 octets.

Structure et taille du bucket

Chaque bucket contient un tableau de 8 * uint8. En ajoutant cela à la taille de l'en-tête, nous obtenons l'allocation de mémoire initiale totale :

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

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