Senior
Kada se slice ponovo deklarise unutar funkcije pri prelasku granice kapaciteta, da li se deklarise na hrpi ili na steku?
sobes.tech АИ
Одговор од АИ
U Go jeziku, slice je struktura koja sadrži pokazivač na niz, dužinu i kapacitet. Kada dodate elemente i pređete trenutni kapacitet slice-a, dodeljuje se novi niz sa povećanim kapacitetom.
Ovaj novi niz se dodeljuje na hrpi (heap), a ne na steku, jer njegovu veličinu i trajanje života nije moguće odrediti u vreme kompajlacije. Nakon toga, slice unutar funkcije pokazuje na ovaj novi niz na hrpi.
Primer:
func appendElement(s []int, val int) []int {
s = append(s, val) // ako kapacitet nije dovoljan, dodeljuje se novi niz na hrpi
return s
}
Na ovaj način, kada se prekorači kapacitet, slice se ponovo deklarise sa novim nizom koji se nalazi na hrpi.