Principiile de bază ale stiva de programare și heap
Noi folosim mai multe limbaje de programare avansate, care ne permit să scrie mai puțin cod și a obține rezultate excelente. Există un preț. Pentru că suntem mai puțin și mai puțin angreneze în lucruri de nivel scăzut devin normal ca mulți dintre noi nu înțeleg pe deplin ceea ce stiva si heap se intampla de fapt compilare, ceea ce este diferența dintre dactilografiere static și dinamic, etc. Nu spun că toți programatorii nu știu despre aceste lucruri - doar cred că, uneori, merită să vină înapoi la astfel de lucruri vechi de școală.
Astăzi vom vorbi doar despre un singur subiect: stiva si heap. Și stiva, și o mulțime de interes pentru diferite locații, în cazul în care managementul memoriei, dar această strategie de management este radical diferit.
Stivă - aceasta este o zonă de memorie care este creat pentru fiecare fir. El lucrează pentru LIFO (Last In, First Out), adică ultima piesă adăugată la stiva de memorie va fi primul în linie pentru retragerea din stivă. De fiecare dată când funcția declară o nouă variabilă, se adaugă la stiva, iar atunci când variabila picături din domeniul de aplicare (de exemplu, atunci când se termină funcția), acesta este șters automat din stivă. Atunci când variabila stivă este eliberată, această zonă de memorie este disponibilă pentru alte variabile stivă.
Având în vedere natura de managementul memoriei stivă este foarte logic și simplu pentru a rula pe CPU; Acest lucru conduce la o viteză mare, în special, pentru că timpul ciclului de actualizări octet stivă este foarte mică, și anume, acest octet este probabil legat de cache-ul procesorului. Cu toate acestea, într-o astfel de formă strictă de control are dezavantajele sale. Stiva dimensiunea - este o valoare fixă, iar peste limita alocată stiva de memorie va duce la o depășire de stivă. Dimensiunea este specificat la crearea de flux și au fiecare o dimensiune maximă a variabilei, care depinde de tipul de date. Acest lucru vă permite să limitați dimensiunea unora dintre variabile (de exemplu, numere întregi), și forțat să declare în prealabil dimensiunea de tipuri de date mai complexe (de exemplu, tablouri), deoarece stiva nu le permite să-l schimbe. În plus, variabilele sunt situate pe stivă sunt întotdeauna locale.
Ca urmare, stiva vă permite să gestioneze mai eficient de memorie - dar dacă aveți nevoie pentru a utiliza structuri de date dinamice și variabile globale, este în valoare de atenție la gramada.
Un buchet - o memorie de stocare, de asemenea situate în RAM, care permite alocarea dinamică a memoriei, și nu funcționează pe principiul stivei: este pur și simplu un depozit pentru variabilele. Când aloca zona de memorie heap pentru stocarea unei variabile, este posibil să se aplice nu numai în flux, dar, de asemenea, pe tot parcursul cererii. Acesta definește variabilele globale. La finalizarea cererii toate zonele de memorie selectate sunt eliberate. dimensiunea memoriei este specificată la pornirea aplicației, dar, spre deosebire de stiva, acesta este doar limitată fizic, și permite crearea variabilelor dinamice.
În comparație cu stiva, heap este mai lent, deoarece variabilele sunt de memorie împrăștiată, și nu stau pe partea de sus a stivei. managementul memoriei incorectă, heap încetinește funcționarea acestuia; Cu toate acestea, acest lucru nu diminuează importanța sa - în cazul în care aveți nevoie pentru a lucra cu un variabile dinamice și globale, folosiți heap.
concluzie
Deci, ați luat cunoștință cu conceptele de stivă și grămadă. Pe scurt, stiva - este de stocare de memorie foarte rapid, care funcționează pe principiul LIFO și controlat de către procesorul. Dar aceste avantaje conduc la o dimensiune limitată a stivei și metoda de obținere a valorilor speciale. Pentru a evita aceste limitări, puteți utiliza un buchet - vă permite să creați variabile dinamice și globale - dar trebuie să gestioneze de memorie sau colector de gunoi, sau programator, și o grămadă de lucrări mai lent.