Sobes.tech
Junior — Middle

Milyen műveletek történnek a veremben egy függvény indításakor egy programban?

sobes.tech MI

Válasz az MI-től

Amikor egy függvényt hívunk meg egy Go programban (és a legtöbb olyan nyelvben, amely támogatja a hívási veremkezelést), a következő történik:

  1. Létrejön egy veremkeret (stack frame) — memória terület a helyi változók, paraméterek és a visszatérési cím tárolására.
  2. A visszatérési cím elmentésre kerül — hogy a függvény befejezése után a program a helyes helyről folytathassa.
  3. A függvény paraméterei másolásra kerülnek — az argumentumok értékei átkerülnek az új keretbe.
  4. A helyi változók inicializálása megtörténik — memória foglalás és szükség esetén kezdőértékek beállítása.

A függvény végrehajtása után a veremkeret törlésre kerül, és az irányítás visszatér a mentett címre.

Egyszerű példa (egyszerűsített):

func add(a, b int) int {
    sum := a + b
    return sum
}

func main() {
    result := add(2, 3)
    fmt.Println(result) // 5
}

Az add hívásakor egy keret jön létre a veremben, paraméterekkel a=2, b=3, helyi változóval sum és a visszatérési címmel a main-ben.