next up previous contents
Next: Valori domenii Up: Date Previous: Date   Cuprins

Referinte

Numararea referintelor este o tehnica care faciliteaza gestiunea curata a memoriei dinamice; astfel, se va sti cu exactitate momentul cand o zona de memorie nu mai este necesara (si va fi deci silentios eliberata (silently discarded)), daca fiecare dorinta de folosire pentru un timp a ei este marcata de incrementarea numarului de referinte, iar cand nu mai e necesara se va decrementa. Totusi, entitatea care foloseste o anumita zona de memorie nu stie de numarul de referinte; stie in schimba de operatia de duplicare, respectiv eliberare. Duplicarea inseamna ca nu se creeaza o copie noua, iar eliberarea inseamna ca potential poate duce la reala eliberare a memoriei ocupate.

Numarul de referinte a unei zone de memorie se initializeaza la 1 (atentie!) in momentul primei ``referiri''. Creearea unei zone de memorie este deci urmata implicit de o duplicare.

Zona de memorie a valorii nul este referita prima oara la pornirea executiei programului, fiind singura care nu poate fi ``alocata/eliberata'' prin programele plint.

Avand in vedere ca numarul de referiri ar putea fi destul de mare ca sa depaseasca capacitatea unui cuvant al masinii, trebuie facuta o analiza asupra domeniului de variatie a lui. Daca fiecare cuvant din memorie ar indirecta spre aceeasi data cu numar de referinta, rezulta ca acesta ar putea inca fi reprezentat pe un cuvant (ar numara cate cuvinte sunt in memore), deoarece dimensiunea memoriei este 2 la puterea lungimii cuvantului in biti. Daca insa memoria datei este utilizata in comun de mai multe procese (neimplementat), atunci numarul de referinte are putea depasi capacitatea cuvantului.

Extensia GNU3.6 a limbajului C permite definirea unui tip de date long long care are capacitate foarte mare. Practic ar fi suficient, deoarece ipoteza de mai sus este un caz teoretic care nu se poate ajunge in practica.

Numarul de referinte mai este folosit si in cadrul algoritmului de colectare a reziduurilor, deoarece acesta foloste propriile numere de referinta pentru tinerea in evidenta a zonelor potenial-reziduuale.

Tipul numarului de referinta este definit in fisierul share/types.h in felul urmator: [first=28,last=36]plint/../share/types.h


next up previous contents
Next: Valori domenii Up: Date Previous: Date   Cuprins
Sebastian Glita 2002-06-19