Sobes.tech
Junior — Middle

Comment la conversion de la longueur du slice en sa taille réelle en mémoire se produit-elle?

sobes.tech IA

Réponse de l'IA

En Go, une tranche (slice) est une structure qui contient :

  • un pointeur vers un tableau,
  • la longueur (len),
  • la capacité (cap).

La longueur de la tranche est le nombre d'éléments qu'elle contient, et la taille réelle en mémoire dépend de la capacité et de la taille du type d'éléments.

Par exemple, si vous avez une tranche d'int (habituellement 8 octets par élément) avec une longueur de 5 et une capacité de 10, alors en mémoire, un espace est réservé pour 10 éléments (80 octets), bien que la longueur soit 5.

Taille de la tranche en mémoire = sizeof(élément) * cap.

Code de démonstration :

package main
import (
    "fmt"
    "unsafe"
)
func main() {
    s := make([]int, 5, 10)
    fmt.Println("len:", len(s))
    fmt.Println("cap:", cap(s))
    fmt.Println("size in bytes:", unsafe.Sizeof(s[0])*uintptr(cap(s)))
}