Cuprins
- A. PARTE TEORETICA:
- I. ALOCARE DINAMICĂ
- 1. IMPORTANŢA ALOCĂRII DINAMICE
- 2. NOŢIUNI TEORETICE
- 3. STRUCTURI DINAMICE DE DATE
- 4. LISTE CIRCULARE SIMPLU INLANTUITE
- B. PARTE PRACTICĂ:
- II. APLICAŢII
- 1.ENUNT PROBLEMA
- 2.ANALIZA PROBLEMEI
- 3.PROGRAM PASCAL
- 4.EXEMPLU DE EXECUTIE
Extras din proiect
. Alocarea dinamică a memoriei
1.Importanţa alocării dinamice
Pentru început, considerăm un exemplu foarte simplu, o variabilă x de tipul « integer ». Declaraţia ei vă este cunoscută :
Var x :integer ;
Ştim că toate variabilele unui program sunt memorate in aşa-numita memorie internă RAM. Aceasta este împarţită în nişte ”casuţe” numite locaţii de memorie sau celule de memorie. Fiecare locaţie reprezintă un octet şi se caracterizează printr-o anumită adresa.Adresele locaţiilor de memorie sunt numere exprimate hexazecimal (baza 16). În urma declarării variabilei x de mai sus, se rezervă penru aceasta doi octeţi în memoria internă RAM, adică doua locaţii succesive.Adresa primeia dintre locaţiile de memorie rezervate variabilei se numeşte pe scurt adresa variabilei x .
Care este scopul alocării memoriei penru varibila x? Ştim că după declarare, variabila a primit o valoare, acea valoare va fi memorata în zona de memorie alocată variabilei.
2.Noţiuni teoretice
Variabila de mai sus, x, se numeşte variabilă statica .O variabilă statică se caracterizeaza prin faptul că în momentul declarării, compilatorul îi aloca un anumit spaţiu de memorie. Acest spaţiu ramâne ocupat pe toată durata execuţiei programului/subprogramului în care a fost declarată variabilă. Procesul se numeşte alocare dinamică a memoriei şi este realizat de către compilatorul Pascal.Mărimea spaţiului rezervat unei variabile depinde de tipul acesteia.De exemplu, pentru o variabilă de tipul integer se aloca doi octeţi ,pentru una de tipul real şase octeţi etc.
În loc să declarăm o variabilă x de tipul integer care ar memora direct un număr întreg (aşa cum am procedat mai sus), vom declara o variabilă x care va conţine adresa de memorie a numărului întreg. Altfel spus, valoarea variabilei x va fi adresa la care se va « depozita » numărul întreg în memoria RAM. Vom spune că « variabila x adresează un număr intreg « sau » variabila x trimite către un număr întreg ».
Variabila x se numeşte « pointer catre un intreg » sau « referinta catre un un intreg », pe scurt vom spune că este un pointer către un întreg.
Apare întrebarea: dacă pointerul x conţine adresa unui număr întreg, atunci unde se va memora efectiv numărul? La declararea pointerului x, compilatorul Pascal creează automat o « variabilă pereche », notată x^, care va memora numărul. «Perechea » notată x^, se numeşte variabilă dinamică.
În concluzie, vom spune că « pointerul x conţine adresa de memorie a variabilei dinamice x^ », sau mai pe scurt « pointerul x adresează variabila dinamică x^ ».
Trebuie să reţinem caracteristicile fundamentale ale unei perechi « pointer-variabilă dinamică » :
- În secţiunea de declaraţii vom defini un pointer care ulterior va conţine adresa unei variabile dinamice.
- Pentru declararea dinamică vom aloca memorie prin program, în momentul folosirii efective a variabilei, iar atunci când variabila nu mai este necesară vom elibera zona de memorie ocupată. Acest proces se numeşte ”alocarea dinamică a memoriei” şi reprezintă de fapt marele avantaj pe care-l oferă variabilele dinamice, şi anume posibilitatea gestionării mult mai eficace a memoriei.
Este de reţinut faptul că între o variabilă statică şi un pointer nu există vreo deosebire de fond. Cu alte cuvinte, un pointer este o variabilă în sens obişnuit, având atributele obişnuite: tip, valoare, adresă. Unica deosebire constă în faptul că valoarea unui pointer este o adresă a unei variabile.
3.Structuri dinamice de date
Tipul de date adresă (referinţă, pointer, reper) desemnează mulţimea de variabile care pot lua ca valori adrese de memorie la care este alocat spaţiu pentru un conţinut de un anume tip numit tip de bază.
Tipul de date adresă oferă posibilitatea de a acţiona în cadrul programului asupra conţinuturilor zonelor de memorie alocate utilizând adrese simbolice pentru referirea lor (fară ca programatorul să cunoască efectiv valorile interne ale acelor adrese).
Preview document
Conținut arhivă zip
- ALOCAREA DINAMICA.doc
- PRIMA PARTE.DOC