Sobes.tech
Junior — Middle

Vysvětlete rozdíly mezi správou paměti na zásobníku a na haldě v kontextu programování.

sobes.tech AI

Odpověď od AI

V programování je paměť obvykle spravována dvěma hlavními způsoby: zásobníkem a haldou.

Zásobník — je oblast paměti, kde jsou uloženy místní proměnné a parametry funkcí. Funguje podle principu LIFO (poslední dovnitř, první ven). Paměť na zásobníku je přiřazena a uvolněna automaticky při vstupu a výstupu z funkcí, což je velmi rychlé a efektivní. Nicméně velikost zásobníku je omezená a nelze v něm ukládat velké objekty nebo data s dynamickou délkou života.

Haldy (Heap) — je oblast paměti pro dynamické přiřazení, kde jsou objekty vytvářeny a žijí tak dlouho, dokud na ně existují odkazy (v Go garbage collector automaticky uvolňuje nepoužívanou paměť). Paměť na haldě je přiřazena a uvolněna ručně nebo automaticky, což je pomalejší než na zásobníku, ale umožňuje vytvářet objekty s libovolnou délkou života a větší velikostí.

Příklad v Go:

func příklad() {
    x := 10           // proměnná x je uložena na zásobníku
    p := new(int)     // alokace paměti na haldě
    *p = 20
}

Zde x je místní proměnná na zásobníku a p ukazuje na paměť na haldě.

Shrnutí:

  • Zásobník: rychlá alokace/uvolnění, omezená velikost, místní data.
  • Haldy: dynamická alokace, větší velikost, správa délky života objektů.