Junior — Middle
Za jakých podmínek dochází k automatickému přidělení paměti z dynamické oblasti během kompilace nebo běhu programu?
sobes.tech AI
Odpověď od AI
V jazyce Go dochází k automatické alokaci paměti z dynamické oblasti (heap) během běhu programu, když kompilátor nebo runtime určují, že proměnná by měla žít déle než aktuální funkce nebo gorutina.
Podmínky, za kterých dochází k alokaci na heap:
- Pokud je proměnná zachycena v uzávěru (closure) a může být použita po opuštění funkce.
- Pokud je proměnná vrácena z funkce nebo předána jiné gorutině.
- Pokud kompilátor nemůže zaručit, že proměnná bude zničena po opuštění aktuálního rozsahu.
Kompilátor Go provádí analýzu úniku (escape analysis), aby určil, které proměnné mají být umístěny na heap a které na zásobník.
Příklad:
func f() *int {
x := 10
return &x // x "uniká" na heap, protože je vrácen ukazatel
}
Zde je x alokováno na heap, protože je vrácen ukazatel na ni a může být použit mimo její rozsah.