Junior
Stack va yamoq o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Stack va Heap — bu ikki xotira hududi bo‘lib, dasturlarda ma’lumotlarni saqlash uchun ishlatiladi.
Stack:
- Mahalliy o‘zgaruvchilar va funksiyalarning qaytish manzillarini saqlash uchun ishlatiladi.
- LIFO (Last In, First Out — oxirgi kirgan, birinchi chiqadi) tamoyiliga asoslangan.
- Xotira boshqaruvi avtomatik: funksiya kirishda ajratiladi va chiqishda ozod qilinadi.
- Boshqarish soddaligi va ma’lumotlarning lokalizatsiyasi sababli Heapdan tezroq.
- Hajmi belgilangan yoki cheklangan bo‘lib, stack overflow (stack to‘lishi) yuz berishi mumkin.
Heap:
- Ob’ektlarning dinamik xotira ajratish uchun ishlatiladi, ular hozirgi funksiyadan chiqgandan keyin ham xotirada qolishi mumkin.
- Xotira boshqaruvi qo‘lda (C/C++ da
malloc/free) yoki avtomatik (ARC/Garbage Collection/Ownership Swift/Rust da) bo‘lishi mumkin. - Boshqarish murakkablashgani va bo‘laklanish ehtimoli sababli Stackdan sekinroq.
- Hajmi ko‘proq moslashuvchan va faqat tizimdagi mavjud xotira bilan cheklangan.
- Ajratilgan xotira ozod qilinmasa, xotira oqishi (memory leak) yuz berishi mumkin.
Taqqoslash:
| Xususiyat | Stack | Heap |
|---|---|---|
| Ishlash prinsipi | LIFO | Belgilangan tartibsizlik |
| Xotira boshqaruvi | Avtomatik | Qo‘lda yoki avtomatik (ARC/GC/Ownership) |
| Tezlik | Tezroq | Sekinroq |
| Foydalanish | Mahalliy o‘zgaruvchilar, qaytish manzillari | Dinamik ajratilgan ob’ektlar, referens tiplari |
| Hajm | Belgilangan / Cheklangan | Moslashuvchan |
| Mumkin muammolar | Stack overflow | Xotira oqishi, bo‘laklanish |
Swiftda, Value Types (masalan, struct, enum, asosiy turlar Int, Bool) odatda stackda saqlanadi, Reference Types (masalan, class, closure) esa heapda. O‘zgaruvchilar, hatto referens tiplari bo‘lsa ham, kompilatorning ba’zi optimizatsiyalari (escape analysis) yordamida stackda saqlanishi mumkin.