Lecția 9

Î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!

  1. 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.
  2. 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.
  3. 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:

  • Programul ar trebui să creeze o matrice dinamică de 7 intregi aleatorii din intervalul [0; 9] și să îl afișeze pe ecran. Dacă există mai multe numere în matricea de numere pare decât cele ciudate, atunci matricea ar trebui să fie trunchiată la 2 elemente de la capăt, altfel - mai întâi la două elemente. Se afișează matricea rezultată.

    Notă: Pentru a scurta un tablou este să creați copia modificată, fără a uita să ștergeți originalul.

    Exemplu de program:

  • Utilizatorul introduce un șir de la tastatură (lungimea maximă a liniei este de 80 de caractere). Programul ar trebui să selecteze toate numerele paralele din linie (zero se referă la ele), dacă acestea sunt în linie și să le plaseze în prima matrice dinamică și toate numerele impare, dacă există, să le pună în a doua matrice dinamică. În cazul în care au apărut, afișați pe ecran pe ambele câmpuri dinamice.

    Un exemplu de program al programului (a doua linie prezintă intrarea utilizatorului):

  • Programul ar trebui să creeze o matrice dinamică de 20 de elemente aleatorii din intervalul [1; 9] și să îl afișeze pe ecran. Apoi, programul trebuie să copieze către cel de-al doilea matrice dinamică numai acele elemente care se întâlnesc exact de 2 ori (dacă există) în prima matrice și să afișeze a doua matrice pe ecran pe o linie separată sau să raporteze că nu există elemente adecvate pentru a-l umple.
  • Articole similare