Junior — Middle
Kokie yra atminties tipai ir kaip jie sąveikauja tarpusavyje?
sobes.tech AI
Atsakymas iš AI
Go (Golang) kalboje pagrindiniai atminties tipai ir jų sąveika yra šie:
-
Kaušas (Stack) — saugo vietines funkcijų kintamąsias. Kaušas greitai paskirstomas ir atlaisvinamas funkcijų kvietimo ir grįžimo metu.
-
Kumpis (Heap) — naudojamas dinamiškai atmintį paskirstyti, pavyzdžiui, objektams, kurie gyvena ilgiau nei dabartinė funkcija. Go turi šiukšlių surinkėją, kuris valdo kaupą.
-
Globali/statinė atmintis — skirta globaliems kintamiesiems ir konstantoms.
Sąveika:
- Kvietimo metu vietiniai kintamieji yra įdedami į kaupą.
- Jei kintamasis turi gyventi ilgiau, kompiliatorius gali jį "perkelti" į kaupą (escape analysis).
- Šiukšlių surinkėjas automatiškai atlaisvina kaupą, kai objektai tampa nepasiekiami.
Pavyzdys:
func foo() *int {
x := 10
return &x // x "pabėga" į kaupą, nes grąžinamas rodyklė
}
Čia kintamasis x bus įdėtas į kaupą, kad rodyklė liktų galiojanti po funkcijos pabaigos.