Sobes.tech
Junior

Stack və yığım arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Stack və Heap, proqramlarda məlumatların saxlanması üçün istifadə olunan iki yaddaş sahəsidir.

Stack:

  • Yerli dəyişənlər və funksiyaların dönüş ünvanlarını saxlamaq üçün istifadə olunur.
  • LIFO (Last In, First Out - son daxil olan, ilk çıxan) prinsipinə əsaslanır.
  • Yaddaş idarəetməsi avtomatikdir: yaddaş funksiya daxilində ayrılır və çıxışda azad edilir.
  • Sadəliyi və məlumatların lokalizasiyası səbəbindən Heap-dən daha sürətlidir.
  • Həcmi sabit və ya məhdud ola bilər, stack overflow (stack daşması) baş verə bilər.

Heap:

  • Ob'ektlərin dinamik yaddaş ayırması üçün istifadə olunur, bu obyektlər cari funksiyadan çıxandan sonra da yaddaşda qala bilər.
  • Yaddaş idarəetməsi əl ilə (C/C++-da malloc/free) və ya avtomatik (ARC/Garbage Collection/Ownership Swift/Rust-da) ola bilər.
  • Daha mürəkkəb idarə və mümkün fragmentasiya səbəbindən Stack-dən daha yavaşdır.
  • Həcmi daha elastikdir və yalnız mövcud sistem yaddaşı ilə məhdudlaşır.
  • Ayırılmış yaddaş azad edilməzsə, yaddaş sızması (memory leak) baş verə bilər.

Müqayisə:

Xüsusiyyət Stack Heap
İş prinsipi LIFO Təyin olunmamış sıra
Yaddaş idarəetməsi Avtomatik Əl ilə və ya avtomatik (ARC/GC/Ownership)
Sürət Daha sürətli Daha yavaş
İstifadə Lokal dəyişənlər, dönüş ünvanları Dinamik ayırılan obyektlər, referans tiplər
Həcmi Sabit / Məhdud Elastik
Mümkün problemlər Stack overflow Yaddaş sızması, fragmentasiya

Swift-də, Value Types (məsələn, struct, enum, əsas tiplər Int, Bool) adətən stack-də saxlanılır, Reference Types (məsələn, class, closure) isə heap-də. Dəyişənlər, hətta referans tiplər olsa da, bəzi optimizasiyalar (escape analysis) sayəsində stack-də saxlanıla bilər.