Sobes.tech
Junior — Middle

Kde a ako sa zvyčajne realizuje delenie pamäte počas behu programu?

sobes.tech AI

Odpoveď od AI

V jazyku Go je slice dátová štruktúra, ktorá obsahuje tri polia: ukazovateľ na pole v pamäti, dĺžku (len) a kapacitu (cap). Počas behu programu je slice uložený na zásobníku (ak je lokálny), a pole, na ktoré ukazuje, je umiestnené na halde alebo v statickej pamäti, v závislosti od situácie.

Keď sa vytvorí slice, napríklad s := make([]int, 5, 10), alokuje sa pole s 10 prvkami na halde, a slice obsahuje ukazovateľ na začiatok tohto poľa, dĺžku 5 a kapacitu 10. Pri odovzdávaní slice do funkcie sa kopíruje iba štruktúra slice (3 polia), nie celý pole, čo je efektívne z hľadiska pamäti.

Príklad:

s := []int{1, 2, 3}
// s - štruktúra s ukazovateľom na pole [1,2,3], dĺžka=3, kapacita=3

func appendValue(slice []int, val int) []int {
    return append(slice, val)
}

s = appendValue(s, 4)

Tu append môže alokovať nové pole, ak kapacita nestačí, a vrátiť nový slice s ukazovateľom na toto pole.