Sobes.tech
Junior — Middle

Quali sono i tipi di memoria esistenti e come interagiscono tra loro?

sobes.tech AI

Risposta dell'AI

In Go (Golang), i principali tipi di memoria e la loro interazione sono i seguenti:

  • Stack (Pila) — memorizza le variabili locali delle funzioni. La pila viene allocata e liberata rapidamente durante la chiamata e il ritorno dalle funzioni.

  • Heap (Heap) — utilizzato per l'allocazione dinamica della memoria, ad esempio per oggetti che vivono più a lungo della funzione corrente. Go ha un garbage collector che gestisce la pulizia dell'heap.

  • Memoria globale/statica — per variabili e costanti globali.

Interazione:

  • Quando si chiama una funzione, le variabili locali vengono collocate nello stack.
  • Se una variabile deve vivere più a lungo, il compilatore può "spostarla" nell'heap (analisi di escape).
  • Il garbage collector libera automaticamente la memoria nell'heap quando gli oggetti diventano inaccessibili.

Esempio:

func foo() *int {
    x := 10
    return &x // x "fugge" nell'heap, poiché viene restituito un puntatore
}

Qui, la variabile x sarà collocata nell'heap affinché il puntatore rimanga valido dopo l'uscita dalla funzione.