Documente Academic
Documente Profesional
Documente Cultură
str1 Curbet
str1 Curbet
MEMORIA CALCULATORULUI
PROGRAM Test; VAR A,B: Integer; BEGIN ... A := 12; B := 5; ... END.
Declarare variabile
Atribuire valori
A B
A B
12 5
VARIABILE STATICE
Toate variabilele pentru care n momentul crerii programului se poate evalua cantitatea de memorie necesart stocrii acestora se numesc variabile statice Variabilele declararte n program i notate printr-un identificator (nume) se numesc variabile statice Variabilele care exist pe toat durata de execuie a blocului n care au fost declarate se numesc variabile statice
VARIABILE DINAMICE
Variabilele care sunt create i distruse pe parcursul execuiei programului se numesc variabile dinamice
ine minte!!!
1. Variabilele dinamice nu se declar ntr-o seciune VAR deci nu se pot identifica prin nume.
2. Nu exist pe toat durata de execuie a programului sau activrii blocului n care s-au creat.
3. Variabilele dinamice se aloc dinamic ntr-o zon special de memorie, numit memorie HEAP i se distrug la cererea programatorului. 4. Accesul la variabilele dinamice se poate face prin intermediul altor variabile speciale, numite variabile REPER, REFERIN, INDICATOR, ADRES, POINTER
Variabila REFERIN
Variabila DINAMIC
p^
DEFINIRI, DECLARRI
^
Identificator_tip_de_baza POINTER TYPE Identificator_tip_Referinta = ^ Identificator_tip_de_baza; VAR Identificator_Variabila : Identificator_tip_Referinta; TYPE Identificator_tip_Referinta =^Identificator_tip_Utilizator; Identificator_tip_Utilizator = ... ; VAR Identificator_Variabila : Identificator_tip_Referinta; sau VAR Identificator_Variabila : ^ Identificator_tip_Referinta;
EXEMPLE
TYPE SubRange=1..25; RefSub=^Subrange; Enumerated=(Rosu, Galben, Verde); RefEnum=^Enumerated; Vector=Array[1..10] of Real; RefVec=^Vector; VAR p : RefSub; p1 : RefEnum; p2 : RefVec; p3 : RefData; a : ^Integer; r : ^Real; ch : ^Char;
Variabilele p, p1, p2, p3, a, r, ch sunt variabile referin, sau variabile reper. Pentru ele se aloc la compilare un spaiu de memorie de 4 bytes (conine adresa de memorie a variabilei dinamice referite)
p p p
sau
? p^ p
NIL
1. ATRIBUIREA
TYPE IdTip = ...; VAR p, q : ^ IdTip; BEGIN ... p := q ; ... p := NIL ; ... END.
Variabila referin poate primi valoarea unei alte variabile sau funcie de acelai tip referin cu ea, sau poate fi iniializat cu constanta NIL.
p q
p
Locaie de memorie
2. COMPARATIA
VAR R, RR : ^ Real; Ri, Rc : ^ Integer; logic : Boolean; BEGIN ... logic := Ri <> NIL ; ... If (R=RR) OR (logic) Then ... ; ... END. Variabilele referin pot fi
Variabilele referin pot s apar n expresii relaionale, singurii operatori relaionali admii fiind = i <>.
3. PARAMETRI
VARIABILA DINAMIC
CREARE
Variabilele dinamice sunt variabilele de un tip oarecare simplu sau structurat pentru care se poate aloca memorie numai n faza de execuie a programului n funcie de necesitate. Type RefTip = ^Real; Var p: RefTip; Begin
NEW(p); ...
End.
p
Adresa lui p^
p^
p^
MEMORIA
Program
Zon variabile statice Zon variabile dinamice (HEAP)
VARIABILA DINAMIC
DISTRUGERE
Eliberarea zonelor de memorie, ocupat de variabilele dinamice, create prin execuia procedurii NEW, pentru a nu deveni gunoi se realizeaz prin execuia procedurii predefinite DISPOSE.
... DISPOSE(p);
p:=NIL;
End.
B
A B
A^ B^
8
-6
A
B
A^
B^
-6
A^
B
A B
-6
-6
B^
A^
A
B
A^
A^
B
A
1
A^
aux
3 2
B^
C^.R e C^.Im
ERORI FRECVENTE
NODURI INACCESIBILE Structuri dinamice cu referine
la ele pierdute (ldia ncuiat cu cheia pierdut) apar dup utilizarea procedurii NEW sau instruciunii de atribuire PN DUP
A^
A
NEW(A);
A^
7
4
A B
7 4
A^ B^
A := B;
A B
A^ B^
ERORI FRECVENTE
REFERINE SUSPENDATE Indicatori ce conin
referine la locaii de memorie eliberate cu DISPOSE
PN
DUP
DISPOSE(A);
A B
? ?
A^ B^