Sobes.tech
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.