Junior — Middle
Quando si passano dati a una funzione: cosa è più efficiente in termini di utilizzo della memoria — un array o un slice?
sobes.tech AI
Risposta dell'AI
In Go, gli array hanno una dimensione fissa e vengono memorizzati completamente in memoria, mentre le slice sono strutture che contengono un puntatore a un array, una lunghezza e una capacità.
Dal punto di vista dell'uso della memoria:
- Array: occupa esattamente la memoria per tutti gli elementi, la dimensione è nota in fase di compilazione.
- Slice: di per sé occupa poca memoria (tre parole: puntatore, lunghezza, capacità), ma punta a un array che contiene i dati.
Nel passaggio a una funzione:
- Se si passa un array, viene copiato interamente, il che può essere costoso in termini di memoria e tempo per array di grandi dimensioni.
- Se si passa una slice, viene coperta solo la struttura della slice (puntatore + lunghezza + capacità), mentre i dati rimangono nell'array originale, quindi non avviene copia dei dati.
Pertanto, passare una slice è più efficiente in termini di utilizzo della memoria e delle prestazioni, specialmente per grandi insiemi di dati.
Esempio:
func processArray(arr [1000]int) {
// copia l'intero array
}
func processSlice(s []int) {
// copia solo la struttura della slice
}
func main() {
var a [1000]int
processArray(a) // costoso
processSlice(a[:]) // efficiente
}