Sobes.tech
Junior

Чиме се разликује стек од хепа?

sobes.tech АИ

Одговор од АИ

Стек (Stack) и купа (Heap) су две области меморије које се користе за чување података у програмима.

Стек:

  • Користи се за чување локалних променљивих и адреса повратка функција.
  • Ради по принципу LIFO (Last In, First Out - последњи ушао, први изашао).
  • Управљање меморијом је аутоматско: меморија се додељује при уласку у функцију и ослобађа при изласку.
  • Брже је од купе због једноставности управљања и локалности података.
  • Размер је фиксна или ограничена, може доћи до прелива стека (stack overflow).

Купа:

  • Користи се за динамичко додељивање меморије објектима који могу остати у меморији након изласка из тренутне функције.
  • Управљање меморијом може бити ручно (преко malloc/free у C/C++) или аутоматско (ARC/Garbage Collection/Ownership у Swift/Rust).
  • Спорија је од стека због сложенијег управљања и могућих фрагментација.
  • Размер је флексибилнија и ограничена само доступном системском меморијом.
  • Може доћи до цурења меморије ако додељена меморија није ослобођена.

Упоређење:

Карактеристика Стек Купа
Принцип рада LIFO Без одређеног реда
Управљање меморијом Аутоматско Ручно или аутоматско (ARC/GC/Ownership)
Брзина Брже Спорије
Користи се Локалне променљиве, адресе повратка Динамички додељени објекти, референтни типови
Величина Фиксна / Ограничена Флексибилна
Могући проблеми Прелив стека (stack overflow) Цурење меморије, фрагментација

У Swift-у, Value Types (нпр. struct, enum, основни типови као Int, Bool) обично се чувају на стеку, док се Reference Types (нпр. class, closure) чувају на купи. Променљиве, чак и референтног типа, могу бити смештене на стеку захваљујући одређеним оптимизацијама компајлера (escape analysis).