Junior — Middle
Cum sunt stocate în memorie dimensiunile și volumele de rezervă ale secțiunilor în limbajul de programare?
sobes.tech AI
Răspuns de la AI
În limbajul Go, un slice este o structură care conține trei câmpuri principale:
- Pointer către array — adresa primului element al slice-ului în memorie.
- Lungime (len) — numărul de elemente accesibile pentru citire.
- Capacitate (cap) — numărul maxim de elemente pe care le poate conține slice-ul fără alocare de memorie nouă.
În memorie, un slice este reprezentat aproximativ astfel:
type SliceHeader struct {
Data uintptr // pointer către array
Len int // lungimea slice-ului
Cap int // capacitatea slice-ului
}
La crearea unui slice, se alocă un array cu o capacitate definită. Dacă, la adăugarea de elemente, lungimea depășește capacitatea, se alocă un nou array de dimensiune mai mare și datele sunt copiate acolo.
Capacitatea rezervată (capacity) permite gestionarea eficientă a memoriei, reducând numărul de alocări pe măsură ce slice-ul crește.
Exemplu:
s := make([]int, 3, 5) // len=3, cap=5
s = append(s, 4) // len=4, cap=5
s = append(s, 5) // len=5, cap=5
s = append(s, 6) // len=6, cap=10 (se alocă memorie nouă)
Astfel, dimensiunile și capacitățile rezervate ale slice-urilor sunt stocate în structura slice-ului și gestionate automat în timpul execuției.