Junior — Middle
Kako se u memoriji čuvaju veličine i rezervni volumeni preseka u programskom jeziku?
sobes.tech АИ
Одговор од АИ
U jeziku Go, rez (slice) je struktura koja sadrži tri glavna polja:
- Pokazivač na niz — adresa prvog elementa rez-a u memoriji.
- Dužina (len) — broj dostupnih elemenata za čitanje.
- Kapacitet (cap) — maksimalan broj elemenata koje rez može da sadrži bez dodeljivanja nove memorije.
U memoriji, rez je približno predstavljen ovako:
type SliceHeader struct {
Data uintptr // pokazivač na niz
Len int // dužina rez-a
Cap int // kapacitet rez-a
}
Prilikom kreiranja rez-a, dodeljuje se niz sa određenim kapacitetom. Ako prilikom dodavanja elemenata dužina pređe kapacitet, dodeljuje se novi veći niz i podaci se kopiraju tamo.
Rezervisani kapacitet (capacity) omogućava efikasno upravljanje memorijom, smanjujući broj alokacija tokom rasta rez-a.
Primer:
s := make([]int, 3, 5) // dužina=3, kapacitet=5
s = append(s, 4) // dužina=4, kapacitet=5
s = append(s, 5) // dužina=5, kapacitet=5
s = append(s, 6) // dužina=6, kapacitet=10 (dodeljuje se nova memorija)
Na ovaj način, veličine i rezervisani kapaciteti rezova se čuvaju u strukturi rez-a i automatski upravljaju tokom izvršavanja.