Junior — Middle
La transmiterea datelor către o funcție: ce este mai eficient din punct de vedere al utilizării memoriei — un tablou sau o secțiune?
sobes.tech AI
Răspuns de la AI
În Go, array-urile au o dimensiune fixă și sunt stocate complet în memorie, în timp ce slice-urile sunt o structură care conține un pointer către un array, o lungime și o capacitate.
Din punctul de vedere al utilizării memoriei:
- Array: ocupă exact memoria pentru toți elementele, dimensiunea fiind cunoscută la timpul de compilare.
- Slice: ocupă în sine puțină memorie (trei cuvinte: pointer, lungime, capacitate), dar indică către un array care stochează datele.
Când sunt transmise către o funcție:
- Dacă se transmite un array, acesta este copiat integral, ceea ce poate fi costisitor în memorie și timp pentru dimensiuni mari.
- Dacă se transmite un slice, se copiază doar structura slice-ului (pointer + lungime + capacitate), iar datele rămân în array-ul original, deci nu are loc copierea datelor.
Prin urmare, transmiterea unui slice este mai eficientă din punct de vedere al utilizării memoriei și performanței, mai ales pentru seturi mari de date.
Exemplu:
func processArray(arr [1000]int) {
// copiază întregul array
}
func processSlice(s []int) {
// copiază doar structura slice-ului
}
func main() {
var a [1000]int
processArray(a) // costisitor
processSlice(a[:]) // eficient
}