Junior — Middle
Gde i kako se obično realizuje segmentacija u memoriji tokom izvršenja programa?
sobes.tech АИ
Одговор од АИ
U Go, slice je struktura podataka koja sadrži tri polja: pokazivač na niz u memoriji, dužinu (len) i kapacitet (cap). Tokom izvršavanja programa, slice se čuva na steku (ako je lokalni), a niz na koji pokazuje smešta se na hrpu ili u statičku memoriju, u zavisnosti od situacije.
Kada se kreira slice, na primer s := make([]int, 5, 10), dodeljuje se niz od 10 elemenata na hrpi, a slice sadrži pokazivač na početak tog niza, dužinu 5 i kapacitet 10. Prilikom prosleđivanja slice funkciji, kopira se samo struktura slice-a (3 polja), a ne ceo niz, što je efikasno po pitanju memorije.
Primer:
s := []int{1, 2, 3}
// s - struktura sa pokazivačem na niz [1,2,3], dužina=3, kapacitet=3
func appendValue(slice []int, val int) []int {
return append(slice, val)
}
s = appendValue(s, 4)
Ovde, append može alocirati novi niz ako kapacitet nije dovoljan, i vratiti novi slice sa pokazivačem na taj niz.