Senior
Amikor egy szeletet újra deklarálunk egy függvényen belül, amikor meghaladja a kapacitást — a heapen vagy a stacken deklarálódik?
sobes.tech MI
Válasz az MI-től
Go nyelvben a slice egy olyan szerkezet, amely egy mutatót tartalmaz egy tömbre, egy hosszúságot és egy kapacitást. Amikor elemeket adsz hozzá, és túlléped a slice aktuális kapacitását, egy új, megnövelt kapacitású tömb kerül lefoglalásra.
Ez az új tömb a heap-en kerül lefoglalásra, nem a stack-en, mert a mérete és az élettartama nem határozható meg fordítási időben. Ezután a függvényen belüli slice erre az új tömbre mutat.
Példa:
func appendElement(s []int, val int) []int {
s = append(s, val) // ha a kapacitás nem elegendő, új tömb kerül lefoglalásra a heap-en
return s
}
Így, a kapacitás túllépésekor, a slice újra deklarálódik egy új tömbbel, amely a heap-en helyezkedik el.