Junior — Middle
Pri odovzdávaní údajov do funkcie: čo je efektívnejšie z hľadiska využitia pamäte — pole alebo rez?
sobes.tech AI
Odpoveď od AI
V jazyku Go majú pole pevne veľkosti a sú úplne uložené v pamäti, zatiaľ čo slices sú štruktúry, ktoré obsahujú ukazovateľ na pole, dĺžku a kapacitu.
Z pohľadu využitia pamäti:
- Pole: zaberá presne toľko pamäti pre všetky prvky, veľkosť je známa počas kompilácie.
- Slice: sám o sebe zaberá málo pamäti (tri slová: ukazovateľ, dĺžka, kapacita), ale ukazuje na pole, ktoré ukladá dáta.
Pri odovzdávaní do funkcie:
- Ak odovzdáte pole, celé sa skopíruje, čo môže byť nákladné na pamäť a čas pri veľkých poliach.
- Ak odovzdáte slice, skopíruje sa iba štruktúra slice (ukazovateľ + dĺžka + kapacita), a dáta zostávajú v pôvodnom poli, teda nedochádza ku kopírovaniu dát.
Preto je odovzdanie slice efektívnejšie z hľadiska využitia pamäti a výkonu, najmä pre veľké množstvá dát.
Príklad:
func processArray(arr [1000]int) {
// kopíruje celé pole
}
func processSlice(s []int) {
// kopíruje iba štruktúru slice
}
func main() {
var a [1000]int
processArray(a) // nákladné
processSlice(a[:]) // efektívne
}