Junior — Middle
Come cambia l'uso dello stack durante l'esecuzione del programma?
sobes.tech AI
Risposta dell'AI
Durante l'esecuzione del programma, lo stack viene utilizzato per memorizzare informazioni sulle chiamate di funzione, le variabili locali e il controllo del flusso di esecuzione.
Quando viene chiamata una funzione, viene inserito uno stack frame (contesto di chiamata) che contiene:
- L'indirizzo di ritorno (dove tornare dopo aver terminato la funzione)
- Variabili locali
- Parametri della funzione
Al termine della funzione, il suo frame viene rimosso dallo stack.
In Go, lo stack cresce e si riduce dinamicamente secondo necessità, consentendo un uso efficiente della memoria. Ad esempio, durante una chiamata ricorsiva, lo stack si espande, e si riduce quando si esce dalle funzioni.
Esempio:
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
func main() {
result := factorial(5)
fmt.Println(result) // 120
}
Qui, ogni chiamata a factorial aggiunge un nuovo frame allo stack, che viene rimosso al ritorno dalla funzione.