Разлика между Stack и Heap

Автор: Laura McKinney
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 17 Може 2024
Anonim
Что такое Heap и Stack память в Java? Разбор на примере
Видео: Что такое Heap и Stack память в Java? Разбор на примере

Съдържание


Stack и Heap са сегментите на паметта, използвани в техниките за разпределение на паметта. Основната разлика между Stack и heap е, че стекът включва линейно и последователно разпределение на паметта, която се използва при статично разпределение на паметта, докато heap действа като пул от място за съхранение, разпределящо паметта на случаен принцип (динамично разпределение на паметта).

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

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

Основа за сравнениекупчинакупчина
ОсновенПаметта се разпределя по (LIFO) Последно първоначално.Паметта се разпределя в произволен ред.
Разпределение и разпределянеавтоматиченнаръчник
ценаПо-малко| Повече ▼
изпълнениеТвърдлесно
ИзвикванеО (N)O (1)
ПроблемНедостиг на паметФрагментация на паметта
Местонахождениеотличенадекватен
гъвкавостФиксиран размер и не е гъвкавПреоразмеряването е възможно
Време за достъпПо-бързоПо-бавно


Дефиниция на Stack

Разпределението на стека следва LIFO (Last in first out) стратегия за присвояване на паметта на процесите с помощта на push и pop операция. Всеки блок в паметта е с фиксиран размер, който не може да се разширява или свива. Последният запис в стека е достъпен във всеки момент. Stack използва съседна памет, в която указател, посочен като база стека, сочи към първия запис на стека, а друг указател, наречен като върха на стека, сочи към последния запис на стека.

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

Рамката на стека се състои или от адреси, или от стойности на параметъра на функцията и връщащ адрес, което означава къде трябва да се върне контрола след завършване на изпълнението на функцията.


Определение на Heap

Разпределението на купчината не следва определен подход; по-скоро позволява произволно присвояване и преотстъпване на паметта. Заявката за присвояване от процес връща обратно с указател към разпределената зона на паметта в грамада и процесът осъществява достъп до разпределената зона на паметта чрез показалеца.

Разпределението се извършва чрез заявката за транслокация, различна от стека, в който паметта се разпределя автоматично. Heap развива дупки в разпределението на паметта, когато структурите на данни са изградени и освободени. Използва се по време на изпълнение.

  1. В стек разпределението и разместването се извършват от процесора и са автоматични, докато в купчина това трябва да се извърши от програмиста ръчно.
  2. Боравенето с купчина на рамката е по-скъпо от работата със стека.
  3. Реализацията на стек е сложна. За разлика от тях, прилагането на купчина е просто.
  4. Функционалното обаждане в стека отнема O (N) време. За разлика от това, това отнема O (1) време на грамада.
  5. Реализацията на стека страда главно от проблема с недостига на памет. Напротив, основният проблем в една купчина е разпокъсаността.
  6. Достъпът до рамка на стека е по-лесен от купищата, тъй като стекът е ограничен до малкия регион на паметта и винаги се удря в кеша, но купищата кадри са разпръснати в цялата памет, така че достъпът до паметта може да доведе до повече пропуски в кеша.
  7. Стека не е гъвкав, разпределеният размер на паметта не може да бъде променен. От друга страна, грамада е гъвкава и заделяната памет може да бъде променена.
  8. Купа отнема повече време за достъп от стека.

заключение

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