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.