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