Sobes.tech
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.