Ce este o stivă?
O stivă este o zonă specială a memoriei computerului care stochează variabilele temporare create de o funcție. În stivă, variabilele sunt declarate, stocate și inițializate în timpul rulării.
Este o memorie de stocare temporară. Când sarcina de calcul este finalizată, memoria variabilei va fi ștearsă automat. Secțiunea stivă conține în mare parte metode, variabile locale și variabile de referință.
În acest tutorial, veți învăța,
- Ce este Stack?
- Ce este Heap?
- Diferențele cheie dintre Stack și Heap
- Avantajele utilizării Stack
- Avantajele utilizării Heap
- Dezavantaje ale utilizării Stack
- Dezavantaje ale utilizării Heap
- Când să folosiți Heap sau stack?
Ce este Heap?
Heap-ul este o memorie utilizată de limbajele de programare pentru a stoca variabile globale. În mod implicit, toate variabilele globale sunt stocate în spațiul de memorie heap. Suportă alocarea dinamică a memoriei.
Heap-ul nu este gestionat automat pentru dvs. și nu este gestionat la fel de bine de CPU. Este mai mult ca o regiune plutitoare liberă a memoriei.
DIFERENȚA CHEIE
- Stiva este o structură de date liniară, în timp ce Heap este o structură de date ierarhică.
- Memoria stivă nu va deveni niciodată fragmentată, în timp ce memoria Heap poate deveni fragmentată pe măsură ce blocurile de memorie sunt mai întâi alocate și apoi eliberate.
- Stiva accesează variabilele locale numai în timp ce Heap vă permite să accesați variabile la nivel global.
- Variabilele stivei nu pot fi redimensionate, în timp ce variabilele Heap pot fi redimensionate.
- Memoria stivă este alocată într-un bloc adiacent, în timp ce memoria Heap este alocată în orice ordine aleatorie.
- Stiva nu necesită alocarea variabilelor, în timp ce în Heap este necesară alocarea.
- Alocarea și dealocarea stivei se realizează prin instrucțiuni ale compilatorului, în timp ce alocarea și dealocarea heap-ului se face de către programator.
Diferențele cheie dintre Stack și Heap
Parametru | Grămadă | Morman |
---|---|---|
Tipul structurilor de date | O stivă este o structură de date liniară. | Heap este o structură de date ierarhizată. |
Viteza de acces | Acces de mare viteză | Mai lent în comparație cu stiva |
Managementul spațiului | Spațiu gestionat eficient de sistemul de operare, astfel încât memoria nu va deveni niciodată fragmentată. | Spațiul Heap nu este utilizat la fel de eficient. Memoria poate deveni fragmentată ca blocuri de memorie alocate mai întâi și apoi eliberate. |
Acces | Numai variabile locale | Vă permite să accesați variabile la nivel global. |
Limita dimensiunii spațiului | Limita dimensiunii stivei depinde de sistemul de operare. | Nu are o limită specifică pentru dimensiunea memoriei. |
Redimensionare | Variabilele nu pot fi redimensionate | Variabilele pot fi redimensionate. |
Alocare de memorie | Memoria este alocată într-un bloc adiacent. | Memoria este alocată în orice ordine aleatorie. |
Alocare și repartizare | Realizat automat de instrucțiunile compilatorului. | Este realizat manual de către programator. |
Dealocare | Nu necesită alocarea variabilelor. | Este necesară o alocare explicită. |
Cost | Mai puțin | Mai mult |
Implementare | O stivă poate fi implementată în 3 moduri bazate pe matrice simplă, utilizând memorie dinamică și bazată pe listă legată. | Heap poate fi implementat folosind matrice și arbori. |
Problema principala | Lipsa memoriei | Fragmentarea memoriei |
Localitatea de referință | Instrucțiuni de timp de compilare automată. | Adecvat |
Flexibilitate | Marime fixa | Redimensionarea este posibilă |
Timpul de acces | Mai repede | Mai lent |
Avantajele utilizării Stack
Iată care sunt avantajele / avantajele utilizării stivei:
- Vă ajută să gestionați datele într-o metodă Last In First Out (LIFO) care nu este posibilă cu lista și matricea legată.
- Când se numește o funcție, variabilele locale sunt stocate într-un teanc și sunt distruse automat odată returnate.
- O stivă este utilizată atunci când o variabilă nu este utilizată în afara funcției respective.
- Vă permite să controlați modul în care este alocată și alocată memoria.
- Stack curăță automat obiectul.
- Nu este ușor corupt
- Variabilele nu pot fi redimensionate.
Avantajele utilizării Heap
Pro / avantajul utilizării memoriei heap sunt:
- Heap vă ajută să găsiți cel mai mare și cel mai mic număr
- Colectarea gunoiului rulează pe memoria heap pentru a elibera memoria utilizată de obiect.
- Metoda Heap utilizată, de asemenea, în coada de prioritate.
- Vă permite să accesați variabile la nivel global.
- Heap nu are nicio limită pentru dimensiunea memoriei.
Dezavantaje ale utilizării Stack
Contra / Dezavantajele utilizării memoriei Stack sunt:
- Memoria stivă este foarte limitată.
- Crearea prea multor obiecte pe stivă poate crește riscul de revărsare a stivei.
- Accesul aleatoriu nu este posibil.
- Stocarea variabilă va fi suprascrisă, ceea ce duce uneori la un comportament nedefinit al funcției sau al programului.
- Stiva va cădea în afara zonei de memorie, ceea ce ar putea duce la o terminare anormală.
Dezavantaje ale utilizării Heap
Contra / dezavantajele utilizării memoriei Heaps sunt:
- Poate oferi memoria maximă pe care o poate oferi un sistem de operare
- Este nevoie de mai mult timp pentru a calcula.
- Gestionarea memoriei este mai complicată în memoria heap, deoarece este utilizată la nivel global.
- Durează prea mult timp în execuție în comparație cu stiva.
Când să folosiți Heap sau stack?
Ar trebui să utilizați heap atunci când aveți nevoie să alocați un bloc mare de memorie. De exemplu, doriți să creați o matrice de dimensiuni mari sau o structură mare pentru a păstra variabila pe o perioadă lungă de timp, apoi ar trebui să o alocați în heap.
Cu toate acestea, dacă lucrați cu variabile relativ mici, care sunt necesare numai până când funcția care le utilizează este activă. Apoi, trebuie să utilizați stiva, care este mai rapidă și mai ușoară.