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