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.