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

  1. Pokazivač na niz — adresa prvog elementa rez-a u memoriji.
  2. Dužina (len) — broj dostupnih elemenata za čitanje.
  3. 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.