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ěť.