Calcul de l'empreinte mémoire d'une carte dans Go
Déterminer la consommation de mémoire d'une carte est essentiel pour la gestion et l'optimisation des ressources. Cependant, calculer la longueur en octets d'une carte dans Go n'est pas une tâche simple.
Le package "encoding/binary" de Go fournit la fonction Size pour calculer l'empreinte mémoire des tranches et des "valeurs fixes", mais il le fait. ne prend pas en charge les cartes. Déduire manuellement le type et la taille des paires clé-valeur dans la carte serait fastidieux et potentiellement inexact.
Explorer la structure de la carte
La solution réside dans la compréhension du structure interne d'une carte. Une carte Go est représentée par un en-tête (hmap) suivi d'un tableau de buckets (bmap). Le hmap contient des informations essentielles telles que le nombre de cellules vivantes (taille de la carte), les graines de hachage et le nombre de seaux.
Calcul de l'empreinte mémoire de la carte
La mémoire L'empreinte d'une carte peut être calculée comme suit :
Exemple de code
Le code suivant illustre le calcul de l'empreinte mémoire d'une carte :
import ( "fmt" "unsafe" ) type MyMap map[string]int func main() { m := MyMap{"key1": 1, "key2": 2} keySize := unsafe.Sizeof(string("key1")) valueSize := unsafe.Sizeof(1) headerSize := unsafe.Sizeof(hmap{}) numKeys := len(m) memoryFootprint := headerSize + (numKeys * 8) + (numKeys * 8 * valueSize) + (numKeys * 8 * keySize) fmt.Printf("Memory footprint of the map: %d bytes\n", memoryFootprint) }
Ce code calcule efficacement l'empreinte mémoire de MyMap, y compris l'en-tête, les clés, les valeurs et le compartiment frais généraux.
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!