Sobes.tech
Junior — Middle

Mění se množství dostupné paměti nebo kapacita při zmenšení velikosti řezu v programovacím jazyce?

sobes.tech AI

Odpověď od AI

V jazyce Go je řez (slice) struktura, která obsahuje ukazatel na pole, délku a kapacitu.

Při zkrácení délky řezu (například pomocí slice = slice[:newLength]) se mění pouze délka — počet prvků dostupných ke čtení a zápisu. Kapacita a přidělená paměť zůstávají stejné, protože řez stále odkazuje na stejný pole.

Pokud chcete zmenšit kapacitu a uvolnit paměť, je třeba vytvořit nový řez a zkopírovat do něj potřebné prvky, například:

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

Tímto způsobem zkrácení délky řezu nemění kapacitu a přidělenou paměť, takže paměť se neuvolňuje automaticky.