Sobes.tech
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()
}