Sobes.tech
Junior — Middle

Kuidas muutub virna kasutus programmi töö ajal?

sobes.tech AI

Vastus AI-lt

Programmi käigus stek kasutatakse teabe salvestamiseks funktsioonikõnede, kohalike muutujate ja täitmise voogude kontrolli kohta.

Kui funktsioon kutsutakse, pannakse stekile kontekst (raam), mis sisaldab:

  • Tagasipöördumis aadressi (kuhu tagasi pärast funktsiooni lõpetamist)
  • Kohalikke muutujaid
  • Funktsiooni parameetreid

Funktsiooni lõpetamisel eemaldatakse selle raam stekilt.

Go keeles kasvab ja kahaneb stek dünaamiliselt vastavalt vajadusele, võimaldades tõhusat mälu kasutamist. Näiteks rekursiivse funktsiooni kutsumisel laieneb stek, ja funktsioonidest väljumisel kahaneb.

Näide:

func factorial(n int) int {
    if n == 0 {
        return 1
    }
    return n * factorial(n-1)
}

func main() {
    result := factorial(5)
    fmt.Println(result) // 120
}

Siin lisab iga factorial kutsung uue raami stekile, mis eemaldatakse funktsioonist naastes.