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.