Junior — Middle
Jak zmienia się użycie stosu podczas działania programu?
sobes.tech AI
Odpowiedź od AI
Podczas działania programu stos jest używany do przechowywania informacji o wywołaniach funkcji, zmiennych lokalnych i kontroli przepływu wykonania.
Gdy wywoływana jest funkcja, na stosie umieszczany jest ramka (kontekst wywołania), która zawiera:
- Adres powrotu (dokąd wrócić po zakończeniu funkcji)
- Zmienne lokalne
- Parametry funkcji
Po zakończeniu funkcji jej ramka jest usuwana ze stosu.
W Go stos dynamicznie rośnie i kurczy się w razie potrzeby, co pozwala na efektywne wykorzystanie pamięci. Na przykład, podczas wywołania funkcji rekurencyjnej, stos się powiększa, a po powrocie z funkcji – zmniejsza.
Przykład:
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
func main() {
result := factorial(5)
fmt.Println(result) // 120
}
Tutaj każde wywołanie factorial dodaje nową ramkę do stosu, która jest usuwana po powrocie z funkcji.