Sobes.tech
Junior — Middle

Aké typy pamäte existujú a ako medzi sebou komunikujú?

sobes.tech AI

Odpoveď od AI

V jazyku Go (Golang) sú hlavné typy pamäte a ich vzájomná interakcia nasledovné:

  • Zásobník (Stack) — ukladá lokálne premenné funkcií. Zásobník sa rýchlo prideľuje a uvoľňuje pri volaní a návrate z funkcií.

  • Hromada (Heap) — používa sa na dynamické prideľovanie pamäte, napríklad pre objekty, ktoré žijú dlhšie ako aktuálna funkcia. Go má garbage collector, ktorý spravuje čistenie hromady.

  • Globálna/statická pamäť — pre globálne premenné a konštanty.

Interakcia:

  • Pri volaní funkcie sú lokálne premenné umiestnené na zásobník.
  • Ak má premenná žiť dlhšie, kompilátor ju môže "presunúť" na hromadu (escape analysis).
  • Garbage collector automaticky uvoľňuje pamäť na hromade, keď objekty prestanú byť dostupné.

Príklad:

func foo() *int {
    x := 10
    return &x // x "unikne" na hromadu, pretože sa vracia ukazovateľ
}

Tu bude premenná x umiestnená na hromadu, aby ukazovateľ zostal platný po opustení funkcie.