Sobes.tech
Junior — Middle

Kaip atmintyje saugomos programavimo kalbos pjūvių dydžiai ir rezerviniai kiekiai?

sobes.tech AI

Atsakymas iš AI

Go kalboje, iškarpa (slice) yra struktūra, kuri turi tris pagrindinius laukus:

  1. Masyvo nuoroda — adreso pirmojo iškarpos elemento atmintyje.
  2. Ilgis (len) — prieinamo skaityti elementų skaičius.
  3. Talpa (cap) — maksimalus elementų skaičius, kurį iškarpa gali talpinti be naujo atminties paskirstymo.

Atmintyje iškarpa vaizduojama maždaug taip:

type SliceHeader struct {
    Data uintptr // nuoroda į masyvą
    Len  int     // iškarpos ilgis
    Cap  int     // iškarpos talpa
}

Kuriant iškarpą, paskiriamas masyvas su nustatyta talpa. Jei pridedant elementus, ilgis viršija talpą, paskiriamas naujas didesnis masyvas ir duomenys į jį kopijuojami.

Rezervuota talpa (capacity) leidžia efektyviai valdyti atmintį, sumažinant paskirstymų skaičių augant iškarpai.

Pavyzdys:

s := make([]int, 3, 5) // ilgis=3, talpa=5
s = append(s, 4)        // ilgis=4, talpa=5
s = append(s, 5)        // ilgis=5, talpa=5
s = append(s, 6)        // ilgis=6, talpa=10 (paskiriama nauja atmintis)

Taip, iškarpų dydžiai ir rezervuotos talpos yra saugomos iškarpos struktūroje ir automatiškai valdomos vykdymo metu.