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