Какво е стек?
Стекът е специална област от паметта на компютъра, която съхранява временни променливи, създадени от функция. В стека променливите се декларират, съхраняват и инициализират по време на изпълнение.
Това е памет за временно съхранение. Когато изчислителната задача приключи, паметта на променливата ще бъде автоматично изтрита. Разделът на стека съдържа предимно методи, локална променлива и референтни променливи.
В този урок ще научите,
- Какво е Stack?
- Какво е Heap?
- Основни разлики между стека и купчината
- Предимства на използването на Stack
- Предимства на използването на Heap
- Недостатъци на използването на Stack
- Недостатъци на използването на Heap
- Кога да използвам Heap или стека?
Какво е Heap?
Купчината е памет, използвана от програмните езици за съхраняване на глобални променливи. По подразбиране всички глобални променливи се съхраняват в паметта на купчина. Той поддържа динамично разпределение на паметта.
Купчината не се управлява автоматично за вас и не се управлява толкова строго от процесора. Това е по-скоро като свободно плаващ регион на паметта.
КЛЮЧОВА РАЗЛИКА
- Стекът е линейна структура от данни, докато Heap е йерархична структура от данни.
- Паметта на стека никога няма да стане фрагментирана, докато паметта на купчината може да стане фрагментирана, тъй като блоковете памет първо се разпределят и след това освобождават.
- Стекът има достъп до локални променливи само докато Heap ви позволява да осъществите глобален достъп до променливи.
- Променливите на стека не могат да бъдат преоразмерени, докато променливите Heap могат да бъдат преоразмерявани.
- Паметната памет се разпределя в непрекъснат блок, докато купчината памет се разпределя във произволен произволен ред.
- Стекът не изисква де-разпределяне на променливи, докато в Heap е необходимо де-разпределение.
- Разпределението и освобождаването на стека се извършва чрез инструкции на компилатора, докато разпределението и освобождаването на купчината се извършва от програмиста.
Основни разлики между стека и купчината
Параметър | Стек | Куп |
---|---|---|
Тип структури от данни | Стекът е линейна структура от данни. | Heap е йерархична структура от данни. |
Скорост на достъп | Високоскоростен достъп | По-бавно в сравнение със стека |
Управление на пространството | Пространството, управлявано ефективно от ОС, така че паметта никога няма да стане фрагментирана. | Heap Space не се използва толкова ефективно. Паметта може да се фрагментира като блокове памет първо се разпределят и след това освобождават. |
Достъп | Само локални променливи | Позволява ви достъп до променливи в световен мащаб. |
Ограничение на размера на пространството | Ограничение за размера на стека в зависимост от операционната система. | Няма конкретно ограничение за размера на паметта. |
Преоразмеряване | Променливите не могат да бъдат преоразмерявани | Променливите могат да бъдат преоразмерявани. |
Разпределение на паметта | Паметта се разпределя в непрекъснат блок. | Паметта се разпределя във произволен произволен ред. |
Разпределение и преразпределение | Извършва се автоматично от инструкциите на компилатора. | Той се извършва ръчно от програмиста. |
Преразпределение | Не изисква де-разпределяне на променливи. | Необходимо е изрично разпределение. |
Разходи | По-малко | | Повече ▼ |
Изпълнение | Стекът може да бъде реализиран по 3 начина, базиран на прост масив, използващ динамична памет и базиран на свързан списък. | Купчината може да бъде реализирана с помощта на масив и дървета. |
Основен въпрос | Недостиг на памет | Фрагментация на паметта |
Местоположение на справка | Инструкции за автоматично компилиране на времето. | Адекватно |
Гъвкавост | Фиксиран размер | Преоразмеряването е възможно |
Време за достъп | По-бързо | По-бавно |
Предимства на използването на Stack
Ето плюсовете / ползите от използването на стека:
- Помага ви да управлявате данните по метода Last In First Out (LIFO), който не е възможен със свързан списък и масив.
- Когато се извика функция, локалните променливи се съхраняват в стек и тя автоматично се унищожава, след като се върне.
- Стек се използва, когато променлива не се използва извън тази функция.
- Тя ви позволява да контролирате как паметта се разпределя и освобождава.
- Stack автоматично почиства обекта.
- Не се поврежда лесно
- Променливите не могат да бъдат преоразмерявани.
Предимства на използването на Heap
Плюсове / ползи от използването на куп памет са:
- Heap ви помага да намерите най-големия и минимален брой
- Събирането на боклука се изпълнява в паметта на купчината, за да освободи паметта, използвана от обекта.
- Метод на купчина, използван и в приоритетната опашка.
- Позволява ви достъп до променливи в световен мащаб.
- Heap няма ограничение за размера на паметта.
Недостатъци на използването на Stack
Недостатъци / недостатъци на използването на паметта на стека са:
- Паметта на стека е много ограничена.
- Създаването на твърде много обекти в стека може да увеличи риска от препълване на стека.
- Случайният достъп не е възможен.
- Променливото съхранение ще бъде заменено, което понякога води до недефинирано поведение на функцията или програмата.
- Стекът ще падне извън областта на паметта, което може да доведе до необичайно прекратяване.
Недостатъци на използването на Heap
Недостатъци / недостатъци на използването на паметта на купчините са:
- Той може да осигури максималната памет, която може да осигури една операционна система
- Изчисляването отнема повече време.
- Управлението на паметта е по-сложно в купчината памет, тъй като се използва глобално.
- Изпълнението отнема твърде много време в сравнение със стека.
Кога да използвам Heap или стека?
Трябва да използвате купчина, когато имате нужда да отделите голям блок памет. Например искате да създадете масив с големи размери или голяма структура, за да запазите тази променлива около дълго време, след което трябва да я разпределите в купчината.
Ако обаче работите с относително малки променливи, които се изискват само докато функцията, която ги използва, е жива. След това трябва да използвате стека, който е по-бърз и лесен.