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:
- Masyvo nuoroda — adreso pirmojo iškarpos elemento atmintyje.
- Ilgis (len) — prieinamo skaityti elementų skaičius.
- 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.