Sobes.tech
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.