Junior — Middle
Jak jsou v programovacím jazyce uloženy velikosti a rezervní objemy řezů v paměti?
sobes.tech AI
Odpověď od AI
V jazyce Go je řez (slice) struktura, která obsahuje tři hlavní pole:
- Ukazatel na pole — adresa prvního prvku řezu v paměti.
- Délka (len) — počet prvků dostupných ke čtení.
- Kapacita (cap) — maximální počet prvků, které může řez obsahovat bez alokace nové paměti.
V paměti je řez přibližně reprezentován takto:
type SliceHeader struct {
Data uintptr // ukazatel na pole
Len int // délka řezu
Cap int // kapacita řezu
}
Při vytváření řezu je alokováno pole s danou kapacitou. Pokud při přidávání prvků délka přesáhne kapacitu, je alokováno nové větší pole a data jsou do něj zkopírována.
Rezervovaná kapacita (capacity) umožňuje efektivní správu paměti, snižuje počet alokací při růstu řezu.
Příklad:
s := make([]int, 3, 5) // délka=3, kapacita=5
s = append(s, 4) // délka=4, kapacita=5
s = append(s, 5) // délka=5, kapacita=5
s = append(s, 6) // délka=6, kapacita=10 (alokace nové paměti)
Tímto způsobem jsou velikosti a rezervované kapacity řezů uloženy ve struktuře řezu a jsou automaticky spravovány během běhu programu.