Junior — Middle
Változik-e a rendelkezésre álló memória vagy a kapacitás a programozási nyelvben, amikor csökkentjük egy szelet méretét?
sobes.tech MI
Válasz az MI-től
Go nyelven a szelet (slice) egy olyan struktúra, amely egy mutatóra mutat egy tömbre, egy hosszra és egy kapacitásra.
Amikor a szelet hosszát csökkentjük (például a slice = slice[:newLength] használatával), csak a hossz változik — az elérhető elemek száma olvasásra és írásra. A kapacitás és a lefoglalt memória változatlan marad, mivel a szelet továbbra is ugyanarra a tömbre mutat.
Ha csökkenteni szeretnéd a kapacitást és felszabadítani a memóriát, akkor új szeletet kell létrehoznod és bele kell másolnod a szükséges elemeket, például:
oldSlice := []int{1, 2, 3, 4, 5}
newSlice := make([]int, 3)
copy(newSlice, oldSlice[:3])
Így a szelet hosszának csökkentése nem változtatja a kapacitást és a lefoglalt memóriát, így a memória nem szabadul fel automatikusan.