Maison >développement back-end >Golang >Quelle quantité de mémoire une carte Go nouvellement créée consomme-t-elle ?

Quelle quantité de mémoire une carte Go nouvellement créée consomme-t-elle ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 04:36:19681parcourir

How Much Memory Does a Newly Created Go Map Consume?

Estimation de la mémoire réservée aux cartes Go

Lorsque vous travaillez avec des cartes Go, il est souvent utile d'avoir une estimation de la mémoire qu'elles consomment. Bien que la documentation indique que l'allocation de mémoire initiale dépend de l'implémentation, voici une analyse plus approfondie de la façon dont vous pouvez déterminer cela :

Inspection du code source de la carte

Les cartes Go sont construites sur deux types : hmap (en-tête) et bmap (tableau de compartiments). L'examen du code source révèle que lorsqu'aucun espace initial n'est spécifié (foo := make(map[string]int)), un seul compartiment est créé dans la carte.

Décomposition d'un en-tête de carte

L'en-tête de la carte lui-même contient plusieurs champs :

  1. int (taille du tableau bmap)
  2. uint8 (nombre de seaux)
  3. uint16 (nombre de seaux de débordement)
  4. uint32 (seuil minimum avant d'agrandir la carte)
  5. Deux pointeurs non sécurisés (pour les éléments et les touches de pointeur)
  6. uintptr (champ inutilisé)

En supposant qu'un Architecture 64 bits, la taille de int, uintptr et unsafe.Pointer fait 8 octets chacun. Cela nous donne une taille d'en-tête de :

1 * 8 + 1 * 1 + 1 * 2 + 1 * 4 + 2 * 8 + 1 * 8 = 40 bytes

Structure du bucket

Chaque bucket d'une carte est un tableau de huit valeurs uint8, ce qui ajoute 8 octets supplémentaires :

8 * 1 = 8 bytes

Consommation totale de mémoire

En additionnant les tailles d'en-tête et de compartiment, nous obtenons une consommation totale de mémoire de :

40 + 8 = 48 bytes (64-bit architecture)

Cette estimation peut être utilisée pour approximer l'utilisation de la mémoire d'une carte Go nouvellement créée sans espace initial spécifié.

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