Gestionarea memoriei este un fenomen fundamental al sistemului de operare utilizat pentru a gestiona sau gestiona memoria primară pentru a controla drepturile de acces la memorie de pe computer. Scopul este de a împiedica accesul oricăror procese la memoria care nu a fost alocată încă.
Sistemul de operare alocă memorie pentru fiecare proces care este împărțit în segmente. Stack și Heap sunt cele două moduri în care este alocată memoria în sistemul de operare.
Segmentul de stive este utilizat pentru a stoca variabilele funcțiilor locale create automat, în timp ce segmentul heap este utilizat pentru memorie alocată dinamic.
Ambele sunt stocate în computerul RAM și pot crește și se pot micșora în timpul executării unui program. Să discutăm pe cele două în detaliu și să le comparăm pentru a înțelege care dintre ele este mai bună.
Segmentul de stive este o tehnică de gestionare a memoriei utilizată pentru alocarea memoriei statice. Este o zonă specială din memoria calculatorului care este utilizată pentru a stoca variabilele funcțiilor locale. Atunci când se numește o funcție, memoria este alocată undeva tuturor variabilelor locale și puteți accesa aceste variabile după cum știți locațiile acestora. Blocurile de memorie sunt eliberate când funcția se termină. Stack-ul este unul dintre modurile de a implementa eficient acest proces. Gândiți-vă la aceasta ca la o structură de date de bază, în care elementele sunt aranjate una peste alta ca un teanc. În mod similar, variabilele locale pot fi accesate prin împingere și extragere. Impingerea se referă la adăugarea de elemente în teanc și în procesul de extragere a elementelor din stivă. Elementele pot fi accesate din stiva din ultima ordine (LIFO).
Heap se referă la o cantitate mare de memorie utilizată pentru alocarea dinamică a memoriei, ceea ce înseamnă că memoria rămâne alocată până când programul este terminat sau dacă memoria este eliberată. Memoria este alocată la întâmplare, astfel încât nu există o modalitate ușoară de a accesa memoria. Spre deosebire de segmentul de stivă, elementele sunt eliberate în ordine inversă așa cum au fost alocate inițial. În termeni simpli, memoria este alocată programelor la cerere și eliberată când nu mai este necesară. Elementele de heap sunt independente unul de celălalt, ceea ce înseamnă că pot fi accesate în timp ce programul rulează și se eliberează când programul se termină. Este ca o piscină de memorie globală folosită pentru stocarea variabilelor globale și a numeroaselor variabile care o menționează.
În arhitectura calculatorului, un teanc este o regiune specială a memoriei computerului, alocată în mod explicit variabilelor automate. În programare, variabila automată este o variabilă locală, adică domeniul de aplicare al variabilei este local al blocului în care este declarată. Memoria este alocată automat acestor variabile la intrarea în bloc și memoria este eliberată la ieșire. Heap, pe de altă parte, este partea din memoria calculatorului utilizată pentru alocările dinamice ale memoriei, adică blocurile de memorie sunt alocate și de-alocate în mod aleatoriu.
Stack-ul este utilizat pentru stocarea variabilelor locale și a căror scop este definit în cadrul funcției. În termeni tehnici, stiva suporta alocarea de memorie statică, care corespunde variabilelor statice locale și variabilelor de domeniu. Memoria este alocată înainte ca programul să fie executat, în general la timpul de compilare și structura de date utilizată se numește stivă. Heap, pe de altă parte, este utilizat pentru alocarea dinamică a memoriei, ceea ce înseamnă că memoria este alocată manual la execuție în timpul executării unui program. Programele solicită memorie, de obicei pentru adăugarea unui nod la structura de date și returnează dacă nu este necesar.
Un stack este gestionat și optimizat de CPU, iar datele sunt accesate printr-o comandă ultimul în primul (LIFO). LIFO se referă la metoda de stocare a datelor în stive de memorie în care cel mai recent bloc de memorie este primul care urmează să fie eliberat și invers. Acest lucru face posibilă gestionarea eficientă a memoriei. Elementele de heap, dimpotrivă, sunt independente una de alta și datele pot fi accesate în mod arbitrar, ceea ce înseamnă că un bloc de memorie poate fi alocat și eliberat în orice moment, indiferent de ordinea lor. Spre deosebire de stive, grămezile nu au un model clar de alocare și de alocare a blocurilor de memorie.
Memoria este gestionată automat în stivă și variabilele sunt alocate și dezalocate automat, ceea ce înseamnă că stiva este rezervată numai pentru variabilele temporare. Variabilele locale devin active atunci când o funcție este executată și când se termină, variabilele ies din domeniul de aplicare, ceea ce înseamnă că domeniul variabilei este local pentru o funcție și există atâta timp cât această funcție este executată. Spre deosebire de stivă, memoria este alocată deoarece programul rulează în heap, ceea ce îl face puțin mai lent pentru a accesa variabilele stocate aici. Deoarece nu există o ordine specifică în rezervarea blocurilor, blocurile de memorie pot fi alocate și libere în orice moment.
Ambele sunt cele mai comune moduri de alocare a memoriei și sunt stocate în memoria RAM a computerului pentru o gestionare eficientă a memoriei. Cu toate acestea, accesul la memorie într-o stivă este rapid, deoarece memoria este gestionată automat, în timp ce în heap, memoria trebuie gestionată manual, ceea ce înseamnă că trebuie să alocați singură memoria liberă când blocurile nu mai sunt necesare. Stack-ul este, evident, mai rapid și mai ușor de utilizat datorită flexibilității sale, dar are o parte echitabilă a argumentelor pro și contra. Deși stiva nu are nicio limită pentru dimensiunea memoriei, este puțin greu de implementat. Heap este mai lent decât un stack, dar implementarea lui este mai simplă.