Sobes.tech
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.