Sobes.tech
Junior — Middle

Qaysi turdagi xotira mavjud va ular qanday o'zaro ta'sir qiladi?

sobes.tech AI

AIdan javob

Go (Golang) dasturlash tilida asosiy xotira turlari va ularning o'zaro ta'siri quyidagicha:

  • Stack (Yig'indi) — funksiyalarning mahalliy o'zgaruvchilarini saqlaydi. Stack chaqqon ajratiladi va funksiyadan chiqish va qaytishda bo'shatiladi.

  • Heap (Xotira) — dinamik xotira ajratish uchun ishlatiladi, masalan, hozirgi funksiyadan uzoqroq yashaydigan obyektlar uchun. Go da garbage collector mavjud bo'lib, u heapni tozalashni boshqaradi.

  • Global/statik xotira — global o'zgaruvchilar va konstantalar uchun.

O'zaro ta'sir:

  • Funksiya chaqirilganda, mahalliy o'zgaruvchilar stackga joylashtiriladi.
  • Agar o'zgaruvchi uzoqroq yashashi kerak bo'lsa, kompilator uni "escape analysis" yordamida heapga o'tkazishi mumkin.
  • Garbage collector, obyektlar etiborsiz bo'lib qolganida, heapdagi xotirani avtomatik ravishda bo'shatadi.

Misol:

func foo() *int {
    x := 10
    return &x // x "qochib" heapga o'tadi, chunki ko'rsatkich qaytariladi
}

Bu yerda, x o'zgaruvchisi heapga joylashtiriladi, shunda ko'rsatkich funksiyadan chiqib ketgach ham valid bo'lib qoladi.