Junior — Middle
Za akých podmienok dochádza k automatickému prideľovaniu pamäte z dynamickej oblasti počas kompilácie alebo behu programu?
sobes.tech AI
Odpoveď od AI
V jazyku Go dochádza k automatickej alokácii pamäte z dynamickej oblasti (heap) počas behu programu, keď kompilátor alebo runtime určí, že premenná by mala žiť dlhšie ako aktuálna funkcia alebo gorutina.
Podmienky, za ktorých dochádza k alokácii na heap:
- Ak je premenná zachytená v uzávierke (closure) a môže byť použitá po opustení funkcie.
- Ak je premenná vrátená z funkcie alebo odovzdaná inej gorutine.
- Ak kompilátor nemôže zaručiť, že premenná bude zničená po opustení aktuálneho rozsahu.
Kompilátor Go vykonáva analýzu úniku (escape analysis), aby určil, ktoré premenné majú byť umiestnené na heap a ktoré na zásobník.
Príklad:
func f() *int {
x := 10
return &x // x "uniká" na heap, pretože sa vracia ukazovateľ
}
Tu je x alokované na heap, pretože sa vracia ukazovateľ na ňu a môže byť použitý mimo jej rozsahu.