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).