Stack vs Heap: Знай разликата

Съдържание:

Anonim

Какво е стек?

Стекът е специална област от паметта на компютъра, която съхранява временни променливи, създадени от функция. В стека променливите се декларират, съхраняват и инициализират по време на изпълнение.

Това е памет за временно съхранение. Когато изчислителната задача приключи, паметта на променливата ще бъде автоматично изтрита. Разделът на стека съдържа предимно методи, локална променлива и референтни променливи.

В този урок ще научите,

  • Какво е 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 или стека?

Трябва да използвате купчина, когато имате нужда да отделите голям блок памет. Например искате да създадете масив с големи размери или голяма структура, за да запазите тази променлива около дълго време, след което трябва да я разпределите в купчината.

Ако обаче работите с относително малки променливи, които се изискват само докато функцията, която ги използва, е жива. След това трябва да използвате стека, който е по-бърз и лесен.