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
Libérer: 2024-12-06 04:36:19
original
679 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal