Sobes.tech
Junior — Middle

Jaké typy paměti existují a jak spolu vzájemně komunikují?

sobes.tech AI

Odpověď od AI

V jazyce Go (Golang) jsou hlavní typy paměti a jejich vzájemné působení následující:

  • Zásobník (Stack) — ukládá lokální proměnné funkcí. Zásobník je rychle přidělen a uvolněn při volání a návratu z funkcí.

  • Hromada (Heap) — používá se pro dynamické přidělení paměti, například pro objekty, které žijí déle než aktuální funkce. Go má garbage collector, který spravuje čištění hromady.

  • Globální/statická paměť — pro globální proměnné a konstanty.

Interakce:

  • Při volání funkce jsou lokální proměnné umístěny na zásobník.
  • Pokud má proměnná žít déle, kompilátor ji může "přesunout" na hromadu (escape analysis).
  • Garbage collector automaticky uvolňuje paměť na hromadě, když objekty přestanou být dosažitelné.

Příklad:

func foo() *int {
    x := 10
    return &x // x "unikne" na hromadu, protože je vrácen ukazatel
}

Zde bude proměnná x umístěna na hromadě, aby ukazatel zůstal platný po opuštění funkce.