Sobes.tech
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.