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:
- 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.
- 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.
- A függvény paraméterei másolásra kerülnek — az argumentumok értékei átkerülnek az új keretbe.
- 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.