Управлението на паметта е основен феномен на операционната система, използвана за обработка или управление на първичната памет, за да се контролират правата за достъп до паметта на компютъра. Целта е да се предотврати достъпът на всеки процес до паметта, която все още не му е била разпределена.
Операционната система разпределя памет за всеки процес, който е разделен на сегменти. Stack и Heap са двата начина на разпределение на паметта в операционната система.
Секционният сегмент се използва за съхранение на локални променливи на функция, които се създават автоматично, докато сегментът от купи се използва за динамично разпределена памет.
И двете се съхраняват в компютърна RAM и те могат да растат и да се свиват по време на изпълнение на програма. Нека обсъдим подробно двете и ги сравним, за да разберем кое е по-добро.
Стек сегмент е техника за управление на паметта, използвана за разпределение на статично памет. Това е специална зона в паметта на компютъра, която се използва за съхраняване на локални променливи на функции. Когато се извика функция, паметта се разпределя на всички локални променливи някъде и можете да получите достъп до тези променливи, тъй като знаете техните местоположения. Блоковете на паметта се освобождават, когато функцията приключи. Stack е един от начините за ефективно изпълнение на този процес. Мислете за това като за основна структура на данни, при която елементите са подредени една върху друга като стек. По подобен начин могат да бъдат достъпни локални променливи с натискане и изскачане. Натискането се отнася за добавяне на елементи в стека и изскачане означава извличане на елементи от стека. Елементите могат да бъдат достъпни от стека в реда на последния първи изход (LIFO).
Heap се отнася до голям пул памет, използван за динамично разпределение на паметта, което означава, че паметта остава разпределена, докато програмата се прекрати или се освободи паметта. Паметта се разпределя произволно, така че няма лесен начин за достъп до паметта. За разлика от сегмента на стека, елементите се освобождават в обратен ред, както първоначално са били разпределени. Казано по-просто, паметта се разпределя към програмите при поискване и се освобождава, когато вече не е необходима. Елементите на купчината са независими един от друг, което означава, че те могат да бъдат достъпни, докато програмата работи и се освободи, когато програмата се прекрати. Това е като пул от глобална памет, използван за съхранение на глобални променливи и много променливи, отнасящи се към него.
В компютърната архитектура стекът е специален регион на паметта на компютъра, изрично разпределен за автоматични променливи. В програмирането автоматичната променлива е локална променлива, което означава, че обхватът на променливата е локален за блока, в който е декларирана. Паметта се разпределя автоматично на тези променливи при влизане в блока и паметта се освобождава при изход. Heap, от друга страна, е частта от паметта на компютъра, използвана за динамично разпределение на паметта, което означава, че блоковете памет се разпределят и де-разпределят по случаен начин.
Stack се използва за съхраняване на локални променливи и обхватът на които са дефинирани във функцията. В техническо отношение стека поддържа разпределение на статична памет, което съответства на локални статични и променливи на обхвата. Паметта се разпределя преди изпълнението на програмата, обикновено по време на компилиране и използваната структура на данни се нарича стек. Heap, от друга страна, се използва за динамично разпределение на паметта, което означава, че паметта се разпределя ръчно по време на изпълнение по време на изпълнение на програма. Програмите изискват памет, обикновено за добавяне на възел към структурата на данните и връщат, ако не са необходими.
Един стек се управлява и оптимизира от процесора и данните се достъпват в ред LIFO. LIFO се отнася до метода за съхранение на данни в стекове от паметта, в който най-новият блок памет е първият, който се освобождава и обратно. Това прави ефективно управление на паметта. Напротив, елементите от купчината са независими един от друг и данните могат да бъдат достъпни произволно, което означава, че блокът памет може да бъде разпределен и освободен по всяко време, независимо от техния ред. За разлика от стекове, купищата нямат определен модел за разпределение и разместване на блокове с памет.
Паметта се управлява автоматично в стека и променливите се разпределят и разпределят автоматично, което означава, че стекът е запазен само за временни променливи. Локалните променливи стават активни, когато дадена функция се изпълнява и когато тя се прекратява, променливите излизат извън обхвата, което означава, че обхватът на променливата е локален за функция и съществува, докато тази функция се изпълнява. За разлика от стека, паметта се разпределя, тъй като програмата работи в грамада, което прави малко по-бавен достъп до променливите, съхранявани тук. Тъй като няма конкретен ред за резервиране на блокове, блоковете памет могат да бъдат разпределени и безплатни по всяко време.
И двете са най-често срещаните начини за разпределение на паметта и се съхраняват в компютърната RAM за ефективно управление на паметта. Достъпът до паметта в стека обаче е бърз, тъй като паметта се управлява автоматично, докато в купчина, паметта трябва да се управлява ръчно, което означава, че трябва сами да разпределите свободната памет, когато блоковете вече не са необходими. Стакът очевидно е по-бърз и лесен за използване благодарение на своята гъвкавост, но има своя справедлив дял от плюсове и минуси. Въпреки че стека няма ограничение за размера на паметта, това е малко трудно за изпълнение. Heap е по-бавен от стека, но изпълнението му е по-просто.