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 :
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.
L'en-tête de la carte lui-même contient plusieurs champs :
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
Chaque bucket d'une carte est un tableau de huit valeurs uint8, ce qui ajoute 8 octets supplémentaires :
8 * 1 = 8 bytes
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!