Sobes.tech
Junior — Middle

Mení sa množstvo dostupnej pamäte alebo kapacita pri znižovaní veľkosti rezu v programovacom jazyku?

sobes.tech AI

Odpoveď od AI

V jazyku Go je rez (slice) štruktúra, ktorá obsahuje ukazovateľ na pole, dĺžku a kapacitu.

Keď znížite dĺžku rezu (napríklad pomocou slice = slice[:newLength]), mení sa iba dĺžka — počet prvkov dostupných na čítanie a zápis. Kapacita a pridelená pamäť zostávajú rovnaké, pretože rez stále odkazuje na ten istý pole.

Ak chcete znížiť kapacitu a uvoľniť pamäť, musíte vytvoriť nový rez a skopírovať do neho potrebné prvky, napríklad:

oldSlice := []int{1, 2, 3, 4, 5}
newSlice := make([]int, 3)
copy(newSlice, oldSlice[:3])

Týmto spôsobom zníženie dĺžky rezu nemení kapacitu a pridelenú pamäť, takže pamäť sa automaticky neuvoľňuje.