Junior — Middle
Koje vrste memorije postoje i kako međusobno komuniciraju?
sobes.tech АИ
Одговор од АИ
U Go (Golang), glavni tipovi memorije i njihova interakcija su sledeći:
-
Stek (Stack) — čuva lokalne promenljive funkcija. Stek se brzo dodeljuje i oslobađa pri pozivu i povratku iz funkcija.
-
Heap (Heap) — koristi se za dinamičku alokaciju memorije, na primer, za objekte koji žive duže od trenutne funkcije. Go ima sakupljač smeća koji upravlja čišćenjem heap-a.
-
Globalna/staticka memorija — za globalne promenljive i konstante.
Interakcija:
- Pri pozivu funkcije, lokalne promenljive se smeštaju na stek.
- Ako promenljiva treba da živi duže, kompajler može "prebaciti" je u heap (escape analysis).
- Sakupljač smeća automatski oslobađa memoriju u heap-u kada objekti postanu nedostupni.
Primer:
func foo() *int {
x := 10
return &x // x "beži" u heap, jer se vraća pokazivač
}
Ovde će promenljiva x biti smeštena u heap, kako bi pokazivač ostao validan nakon izlaska iz funkcije.