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.