În primul rând, vom discuta caracteristicile fiecărui tip de memorie.
Memorie statică
Un loc în memoria statică este rezervat în momentul în care programul este pornit și este lansat numai după terminarea programului.
Există variabile globale (declarate în afara oricăror blocuri, în special, înainte de începerea metodei principale) și variabilele statice (înainte de tipul căruia este specificat cuvântul cheie static. Pentru a menține o variabilă statică în interiorul funcției însăși, va fi specifică: salvați valorile sale între apelurile funcționale repetate). Diferența dintre o variabilă statică și globală se manifestă atunci când programul constă din mai multe fișiere: variabilele globale sunt disponibile în fișiere adiacente, iar cele statice sunt doar în fișierul în care au fost declarate.
În memoria statică, nu se recomandă păstrarea obiectelor lungi (de exemplu, tablouri).
Memorie locală (memorie stack)
Acesta este alocat la intrarea în blocul programului, este eliberat - la o ieșire din bloc.
Există variabile declarate în blocuri (în special, în corpul de funcții).
Memorie dinamică
Este alocată și eliberată - cu ajutorul unor instrucțiuni speciale (adică la inițiativa dezvoltatorului). Acest lucru permite programului să monitorizeze și să ajusteze cantitatea de memorie utilizată și, în consecință, să creeze programe capabile să proceseze cantități mari de date, evitând memoria fizică a aparatului.
Accesul la memoria dinamică este posibil numai prin intermediul pointerilor, adică nu puteți crea variabile în el, dar puteți selecta fragmentele sale și le puteți asocia cu un anumit pointer.
Lucrul cu memoria dinamică
Memoria este alocată utilizând noul operator. și este lansat utilizând operatorul de ștergere.
În momentul în care este alocată memoria dinamică, aceasta trebuie să fie asociată cu un anumit indicator al tipului corespunzător (atunci când se selectează, sunt indicate tipul și numărul celulelor necesare de acest tip).
Dacă nu eliberați memoria dinamică, aceasta va fi ocupată până când programul va fi terminat, ceea ce este inacceptabil.
Dacă selectați o variabilă dinamică (o locație de memorie), puteți inițializa imediat valoarea acesteia:
Este posibilă alocarea simultană a unor celule de memorie dinamică, care primesc o matrice dinamică.
Pentru a face acest lucru, mărimea acesteia este indicată în paranteze pătrate după tipul.
Pentru a șterge o matrice dinamică și a elibera memoria, utilizați operatorul de ștergere [].
Imediat după crearea, matricea dinamică este populate automat cu zerouri (spre deosebire de matricea obișnuită în memoria statică sau stack).
Problema devine mai accentuată atunci când matricele întregi sunt pierdute în memorie (ocupă mai mult spațiu decât variabilele individuale).
La fiecare etapă a ciclului, se creează o matrice dinamică de 100 de elemente. În total, 10 astfel de rețele vor fi create, dar numai din ultima dintre ele memoria va fi eliberată după ieșirea din bucla. 9 matrice vor continua să ocupe spațiul în memorie până la sfârșitul programului. 9 arrayuri * 100 elemente * 4 octeți = 3600 octeți de memorie pierdută, care nu pot fi utilizate în nici un fel (nici în acest program, nici în celelalte).
Este foarte important să folosiți memoria dinamică pentru a vă aminti să o eliberați la momentul potrivit!
- Programul ar trebui să creeze o matrice dinamică de 10 intregi aleatorii din intervalul [0; 9] și să îl afișeze pe ecran. Fiecare matrice dinamică trebuie eliminată din memorie de îndată ce a fost utilizată ultima dată. Asigurați-vă că efectuați curățarea în timp util a memoriei atunci când rezolvați fiecare dintre următoarele sarcini.
- Programul ar trebui să creeze o matrice dinamică de n întregi aleatorii din intervalul [0; 9] și să îl afișeze pe ecran. Dimensiunea matricei n este solicitată de la utilizator la începutul programului.
- Programul ar trebui să creeze două tablouri cu elemente aleatorii din intervalul [-25; 25]; 10 elemente din fiecare matrice; să afișeze fiecare matrice pe ecran pe o linie separată. Apoi, programul trebuie să creeze o matrice dinamică cu dimensiunea corectă și să copieze în ea toate elementele pozitive din primele două matrice. Și scoateți matricea dinamică rezultată pe ecran pe o linie separată.
Exemplu de program:
Notă: Pentru a scurta un tablou este să creați copia modificată, fără a uita să ștergeți originalul.
Exemplu de program:
Un exemplu de program al programului (a doua linie prezintă intrarea utilizatorului):