Maison >développement back-end >Golang >Quelle quantité de mémoire une carte Go initialement vide alloue-t-elle ?
Allocation de mémoire dans Go Maps : une enquête spécifique à l'implémentation
Dans le monde de la cartographie Go, l'allocation de mémoire présente une énigme. L'absence d'un paramètre de capacité initial lors de l'initialisation d'une carte laisse la taille de l'espace alloué soumise aux caprices de l'implémentation. Mais comment dévoiler les secrets de cette allocation cachée ?
Plonger dans les profondeurs du code source de la carte Go révèle une structure composée d'un en-tête et d'un tableau de buckets. Dans le cas d'un espace initial non précisé, la carte ne comporte qu'un seul bucket.
L'en-tête lui-même est un véritable labyrinthe de champs :
Sur les machines 64 bits, la taille de int, uintptr et unsafe.Pointer s'aligne sur la taille du mot (8 octets). Cette composition donne un total de 40 octets pour l'en-tête.
Maintenant, tournons notre attention vers le bucket, qui héberge un tableau de 8 éléments uint8. Cela contribue à 8 octets supplémentaires au décompte global.
En combinant ces composants, nous arrivons à un total général de 48 octets (pour les architectures 64 bits). Forts de ces connaissances, nous pouvons percer en toute confiance le voile d’incertitude entourant l’allocation de mémoire cartographique dans Go.
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!