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

  1. Pointer către array — adresa primului element al slice-ului în memorie.
  2. Lungime (len) — numărul de elemente accesibile pentru citire.
  3. 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.