Junior — Middle
Cum se schimbă utilizarea stivei în timpul rulării programului?
sobes.tech AI
Răspuns de la AI
În timpul execuției programului, stiva este utilizată pentru a stoca informații despre apelurile de funcții, variabilele locale și controlul fluxului de execuție.
Când este apelată o funcție, se plasează un cadru (context de apel) pe stivă, care conține:
- Adresa de returnare (unde să se revină după finalizarea funcției)
- Variabile locale
- Parametrii funcției
La finalizarea funcției, cadrul acesteia este eliminat din stivă.
În Go, stiva crește și se micșorează dinamic după nevoie, ceea ce permite utilizarea eficientă a memoriei. De exemplu, la apelarea unei funcții recursive, stiva se extinde, iar la ieșirea din funcții, se contractă.
Exemplu:
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
func main() {
result := factorial(5)
fmt.Println(result) // 120
}
Aici, fiecare apel al factorial adaugă un nou cadru pe stivă, care este eliminat la revenirea din funcție.