Sobes.tech
Junior — Middle

Za jakých situací překladač automaticky rezervuje paměť v dynamické oblasti (haldě)?

sobes.tech AI

Odpověď od AI

V kompilátoru jazyka Go je paměť na haldě (heap) automaticky přidělována v následujících situacích:

  • Když proměnná musí žít déle než doba běhu funkce, ve které je deklarována (analýza úniku). Například pokud je adresa lokální proměnné vrácena z funkce nebo uložena ve struktuře, která žije déle.
  • Pokud je proměnná příliš velká pro zásobník nebo její velikost je během kompilace neznámá.

Příklad:

func create() *int {
    x := 10
    return &x // proměnná x "unikne" na haldu, protože je vrácen ukazatel
}

Zde bude proměnná x umístěna na haldě, aby ukazatel zůstal platný po opuštění funkce. Kompilátor analyzuje kód (analýza úniku) a rozhodne, kde alokovat paměť.