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