Junior — Middle
Lors du passage de données à une fonction : qu'est-ce qui est plus efficace en termes d'utilisation de mémoire — un tableau ou une tranche ?
sobes.tech IA
Réponse de l'IA
En Go, les tableaux ont une taille fixe et sont entièrement stockés en mémoire, tandis que les slices sont une structure contenant un pointeur vers un tableau, une longueur et une capacité.
Du point de vue de l'utilisation de la mémoire :
- Tableau : occupe exactement la mémoire pour tous les éléments, la taille est connue à la compilation.
- Slice : en soi, occupe peu de mémoire (trois mots : pointeur, longueur, capacité), mais pointe vers un tableau qui stocke les données.
Lors du passage à une fonction :
- Si un tableau est passé, il est copié en entier, ce qui peut être coûteux en mémoire et en temps pour de grandes tailles.
- Si un slice est passé, seule la structure du slice (pointeur + longueur + capacité) est copiée, et les données restent dans le tableau d'origine, donc aucune copie de données n'a lieu.
Par conséquent, passer un slice est plus efficace en termes d'utilisation de la mémoire et de performance, surtout pour de grands ensembles de données.
Exemple :
func processArray(arr [1000]int) {
// copie tout le tableau
}
func processSlice(s []int) {
// ne copie que la structure du slice
}
func main() {
var a [1000]int
processArray(a) // coûteux
processSlice(a[:]) // efficace
}