Junior
Xotira ichida stek va to'plam qanday ishlatiladi?
sobes.tech AI
AIdan javob
Yig'indi (Stack) mahalliy o'zgaruvchilar, funksiyalar parametrlari va qaytish manzillarini saqlash uchun ishlatiladi. Xotira avtomatik ravishda LIFO (Last-In, First-Out) tamoyili bo'yicha ajratiladi va bo'shatiladi.
Yig'indi (Heap) dinamik ravishda xotira ajratish uchun ishlatiladi, bu obyektlarning o'lchami kompilyatsiya vaqtida noma'lum bo'lsa yoki ularning yashash muddati yaratish kontekstidan oshib ketadigan bo'lsa. Xotira boshqaruvi qo'lda yoki xotira boshqaruv mexanizmlari (Swiftda ARC, boshqa tillarda garbage collector) yordamida amalga oshiriladi.
| Xususiyat | Yig'indi (Stack) | Yig'indi (Heap) |
|---|---|---|
| Ajratish | Avtomatik | Dinamik (qo'lda yoki MRC/ARC bilan) |
| Bo'shatish | Kontekstdan chiqishda avtomatik | Qo'lda (free) yoki MRC/ARC bilan |
| Ma'lumotlar o'lchami | Kompilyatsiya vaqtida ma'lum | Ishga tushirish vaqtiga qadar noma'lum bo'lishi mumkin |
| Kirish | Tez, ketma-ketlik bilan | Sekinroq, tasodifiy |
| Struktura | LIFO | Ob'ektlar grafigi |
| Misollar | Mahalliy o'zgaruvchilar, funksiyalar parametrlari | Klass obyektlari, o'zgaruvchan o'lchamdagi tuzilmalar |
// Swiftda yig'indi va yig'indi (heap) foydalanish misoli
func myFunction() {
// Yig'indagi mahalliy o'zgaruvchi
var stackVariable: Int = 10
// Yig'indagi sinf ob'ekti
let heapObject = MyClass()
// Qiymat turi yig'indagi (referens turlarni o'z ichiga olmaydigan tuzilmalar)
var stackStruct = MyStruct()
// Referens turini o'z ichiga olgan tuzilma, qismi yig'indida bo'lishi mumkin
var mixedStruct = MyMixedStruct()
}
class MyClass {
// Ob'ektning xususiyatlari yig'indida saqlanadi
var property: String = "Hello"
}
struct MyStruct {
// Qiymat turi xususiyatlari yig'indida saqlanadi
var property: Int = 20
}
class MyReferenceType {
var value: Int = 30
}
struct MyMixedStruct {
// Yig'indagi qiymat turi
var stackProperty: Int = 40
// Yig'indagi referens tur (o'ziga xos referens yig'indida)
var heapReference: MyReferenceType = MyReferenceType()
}