Junior — Middle
V akých situáciách automaticky rezervuje prekladač pamäť v dynamickej oblasti (zásobník)?
sobes.tech AI
Odpoveď od AI
V kompilátore jazyka Go sa pamäťou na halde (heap) automaticky prideľuje v nasledujúcich situáciách:
- Keď premenná musí žiť dlhšie ako doba vykonávania funkcie, v ktorej je deklarovaná (analýza úniku). Napríklad, ak je adresa lokálnej premennej vrátená z funkcie alebo uložená v štruktúre, ktorá žije dlhšie.
- Ak je premenná príliš veľká pre zásobník alebo jej veľkosť je počas kompilácie neznáma.
Príklad:
func create() *int {
x := 10
return &x // premenná x "unikne" na haldu, pretože sa vracia ukazovateľ
}
Tu bude premenná x umiestnená na halde, aby ukazovateľ zostal platný po opustení funkcie. Kompilátor analyzuje kód (analýza úniku) a rozhodne, kde alokovať pamäť.