Sobes.tech
Junior — Middle

Comment la mémoire stocke-t-elle les tailles et les volumes de réserve des tranches dans le langage de programmation?

sobes.tech IA

Réponse de l'IA

Dans le langage Go, une tranche (slice) est une structure contenant trois champs principaux:

  1. Pointeur vers le tableau — l'adresse du premier élément de la tranche en mémoire.
  2. Longueur (len) — le nombre d'éléments accessibles en lecture.
  3. Capacité (cap) — le nombre maximum d'éléments que la tranche peut contenir sans allocation de nouvelle mémoire.

En mémoire, une tranche est représentée approximativement comme suit:

type SliceHeader struct {
    Data uintptr // pointeur vers le tableau
    Len  int     // longueur de la tranche
    Cap  int     // capacité de la tranche
}

Lors de la création d'une tranche, un tableau avec une capacité définie est alloué. Si, lors de l'ajout d'éléments, la longueur dépasse la capacité, un nouveau tableau de taille supérieure est alloué et les données y sont copiées.

La capacité réservée (capacity) permet de gérer efficacement la mémoire, en réduisant le nombre d'allocations lors de la croissance de la tranche.

Exemple:

s := make([]int, 3, 5) // len=3, cap=5
s = append(s, 4)        // len=4, cap=5
s = append(s, 5)        // len=5, cap=5
s = append(s, 6)        // len=6, cap=10 (allocation d'une nouvelle mémoire)

Ainsi, la taille et la capacité réservée des tranches sont stockées dans la structure de la tranche et gérées automatiquement lors de l'exécution.