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

  1. Ukazatel na pole — adresa prvního prvku řezu v paměti.
  2. Délka (len) — počet prvků dostupných ke čtení.
  3. 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.