Junior — Middle
Kde a jak je obvykle realizováno dělení paměti během běhu programu?
sobes.tech AI
Odpověď od AI
V jazyce Go je slice datová struktura, která obsahuje tři pole: ukazatel na pole v paměti, délku (len) a kapacitu (cap). Během běhu programu je slice uložen na zásobníku (pokud je lokální), a pole, na které ukazuje, je umístěno na haldě nebo ve statické paměti, v závislosti na situaci.
Když je vytvořen slice, například s := make([]int, 5, 10), alokuje se pole s 10 prvky na haldě, a slice obsahuje ukazatel na začátek tohoto pole, délku 5 a kapacitu 10. Při předání slice do funkce se kopíruje pouze struktura slice (3 pole), nikoli celé pole, což je efektivní z hlediska paměti.
Příklad:
s := []int{1, 2, 3}
// s - struktura s ukazatelem na pole [1,2,3], délka=3, kapacita=3
func appendValue(slice []int, val int) []int {
return append(slice, val)
}
s = appendValue(s, 4)
Zde append může alokovat nové pole, pokud kapacita nestačí, a vrátit nový slice s ukazatelem na toto pole.