memoria într-un program C/C++/Java poate fi alocată fie pe stivă, fie pe heap.
condiție prealabilă: dispunerea memoriei programului C.
alocare stivă: alocarea se întâmplă pe blocuri contigue de memorie. Noi o numim o alocare de memorie stivă, deoarece alocarea se întâmplă în stiva de apel funcție. Dimensiunea memoriei care urmează să fie alocată este cunoscută compilatorului și ori de câte ori este apelată o funcție, variabilele sale primesc memorie alocată pe stivă. Și ori de câte ori apelul de funcție este de peste, memoria pentru variabilele este deallocated., Toate acestea se întâmplă folosind unele rutine predefinite în compilator. Un programator nu trebuie să vă faceți griji cu privire la alocarea memoriei și dealocarea variabilelor stiva. Acest tip de alocare a memoriei, de asemenea, cunoscut sub numele de alocare temporară a memoriei, deoarece de îndată ce metoda își termină execuția, toate datele aparțin acelei metode se elimină automat din stivă. Înseamnă că orice valoare stocată în schema de memorie stivă este accesibilă atât timp cât metoda nu și-a finalizat execuția și este în stare de funcționare.,
puncte cheie:
- Este o schemă temporară de alocare a memoriei în care membrii de date sunt accesibili numai dacă metoda( ) care le conține este în prezent se execută.
- alocă sau dezactivează automat memoria de îndată ce metoda corespunzătoare își finalizează execuția.
- primim eroarea corespunzătoare Java. lang. StackOverFlowError de JVM, în cazul în care memoria stiva este umplut complet.
- alocarea memoriei stivă este considerată mai sigură în comparație cu alocarea memoriei heap, deoarece datele stocate pot fi accesate numai de firul proprietar.,
- alocarea și dezalocarea memoriei este mai rapidă în comparație cu alocarea memoriei Heap.
- stiva de memorie are mai puțin spațiu de stocare în comparație cu Heap-memorie.,373″>
int
b;
int
n = 20;
int
c;
}
Heap Allocation: The memory is allocated during the execution of instructions written by programmers., Rețineți că numele heap nu are nicio legătură cu structura de date heap. Se numește heap, deoarece este o grămadă de spațiu de memorie disponibil programatorilor pentru a fi alocat și de-alocat. De fiecare dată când am făcut un obiect creează întotdeauna în Heap-spațiu și informațiile de referință la aceste obiecte sunt întotdeauna stocate în stivă-memorie. Alocarea memoriei Heap nu este la fel de sigură ca alocarea memoriei stiva, deoarece datele stocate în acest spațiu sunt accesibile sau vizibile pentru toate firele. Dacă un programator nu gestionează bine această memorie, se poate întâmpla o scurgere de memorie în program.,alocarea memoriei Heap este împărțită în trei categorii: – aceste trei categorii ne ajută să prioritizăm datele(obiectele) care trebuie stocate în memoria Heap sau în colectarea gunoiului.Young Generation – este porțiunea de memorie în cazul în care toate datele noi(obiecte) sunt făcute pentru a aloca spațiul și ori de câte ori această memorie este complet umplut apoi restul datelor sunt stocate în colectarea gunoiului.,
- generație veche sau Titularizată – aceasta este partea memoriei Heap care conține obiectele de date mai vechi care nu sunt utilizate frecvent sau nu sunt utilizate deloc.
- generație permanentă – aceasta este porțiunea de memorie Heap care conține metadatele JVM pentru clasele de rulare și metodele de aplicare.
puncte cheie:
- primim mesajul de eroare corespunzător dacă Heap-space este complet plin, java. lang.OutOfMemoryError de JVM.,
- această schemă de alocare a memoriei este diferită de alocarea spațiului stivă, aici nu este prevăzută o viitoare dealocare automată. Trebuie să folosim un colector de gunoi pentru a elimina obiectele vechi neutilizate pentru a utiliza eficient memoria.
- timpul de procesare (Timpul de accesare) al acestei memorii este destul de lent în comparație cu memoria stivă.
- memoria Heap nu este, de asemenea, sigură ca memoria stivă, deoarece datele stocate în memoria Heap sunt vizibile pentru toate firele.
- dimensiunea Heap-memorie este destul de mare în comparație cu stiva de memorie.,
- memoria Heap este accesibilă sau există atât timp cât întreaga aplicație(sau programul java) rulează.,iv>
*ptr =
new
int
;
}
Amestecate exemplu de ambele tipuri de alocare de memorie Heap și Stiva în java:
sunt Următoarele concluzii pe care le vom face după analizând exemplul de mai sus:
- așa Cum am începe executarea am program, toate run-time clase sunt stocate în Heap-spațiu de memorie.,
- apoi vom găsi main () metoda în linia următoare, care este stocată în stivă, împreună cu tot ce este primitiv(sau local) și variabila de referință Emp de tip Emp_detail va fi, de asemenea, stocate în stivă și va indica obiectul corespunzător stocat în memoria Heap.
- apoi linia următoare va apela la constructorul parametrizat Emp (Int, String) de la main () și va aloca, de asemenea, în partea de sus a aceluiași bloc de memorie stivă. Aceasta va stoca:
- Referința obiectului obiectului invocat din memoria stivei.,
- valoarea primitivă (tip de date primitive) id INT în memoria stivei.
- variabila de referință a argumentului String emp_name care va indica șirul real din piscina string în memoria heap.
- apoi metoda principală va apela din nou la metoda statică Emp_detail (), pentru care alocarea se va face în blocul de memorie stivă deasupra blocului de memorie anterior.deci, pentru obiectul nou creat Emp de tip Emp_detail și toate variabilele de instanță vor fi stocate în memoria heap.
reprezentare picturală așa cum se arată în figură.,1 de mai jos:
Fig.1
diferențe cheie între alocările stivă și Heap
- într-o stivă, alocarea și deallocarea se fac automat, în timp ce, în heap, trebuie să fie făcută manual de programator.
- manipularea cadrului Heap este mai costisitoare decât manipularea cadrului stivă.
- problema lipsei de memorie este mult mai probabil să se întâmple în stivă, în timp ce problema principală în memoria heap este fragmentarea.,
- Stack frame access este mai ușor decât cadrul heap ca stiva au o regiune mică de memorie și este cache-friendly, dar în cazul cadrelor heap, care sunt dispersate în întreaga memorie, astfel încât provoacă mai multe ratări cache.
- o stivă nu este flexibilă, dimensiunea memoriei alocată nu poate fi modificată, în timp ce o grămadă este flexibilă, iar memoria alocată poate fi modificată.
- timpul de accesare a heap ia este mai mult decât o stivă.,
Diagramă Comparație
Parametrul STIVA HEAP de Bază Memorie este alocată într-un bloc contiguu. Memoria este alocată în orice ordine aleatorie. alocare și Dealocare automat de instrucțiuni compilator. Manual de programator.,d>Less More Implementation Hard Easy Access time Faster Slower Main Issue Shortage of memory Memory fragmentation Locality of reference Excellent Adequate Flexibility Fixed-size Resizing is possible Data type structure Linear Hierarchical Article Tags :