Junior — Middle
Ce tipuri de memorie există și cum interacționează între ele?
sobes.tech AI
Răspuns de la AI
În Go (Golang), principalele tipuri de memorie și interacțiunea lor sunt următoarele:
-
Stivă (Stack) — stochează variabilele locale ale funcțiilor. Stiva este alocată și eliberată rapid la apelarea și revenirea din funcții.
-
Heap (Heap) — folosit pentru alocarea dinamică a memoriei, de exemplu, pentru obiecte care trăiesc mai mult decât funcția curentă. Go are un colector de gunoi care gestionează curățarea heap-ului.
-
Memorie globală/statica — pentru variabile și constante globale.
Interacțiune:
- La apelarea unei funcții, variabilele locale sunt plasate pe stivă.
- Dacă o variabilă trebuie să trăiască mai mult, compilatorul o poate "mută" în heap (analiza de scăpare).
- Colectorul de gunoi eliberează automat memoria din heap când obiectele devin inaccesibile.
Exemplu:
func foo() *int {
x := 10
return &x // x "fuge" în heap, deoarece se returnează un pointer
}
Aici, variabila x va fi plasată în heap pentru ca pointerul să rămână valid după ieșirea din funcție.