Sunteți pe pagina 1din 3

Alocarea dinamica a memoriei

Fiecarui program i se aloca trei zone distincte in memoria interna: segment de date; segment de stiva heap. Def. Prin pointer intelegem adresa unei variabile , iar printr-o variabila de tip pointer vom intelege o variabila care poate retine adresele altor variabile. Prin alocare dinamica a memoriei vom intelege alocarea unor variabile in Heap, alocare care se face in timpul executarii programului si nu de la inceput. Alocarea dinamica foloseste pointeri si variabile de tip pointer. Avantajele alocarii dinamice: utilizarea memoriei cat are nevoie in orland !"" memoria din segmentul de date nu este intotdeauna suficienta , e limitata la #$ %, dar apeland la Heap, creste memoria disponibila.

Variabilele de tip pointer in C++


&emoria interna poate fi privita ca o succesiune de octeti care sunt numerotati pentru a-i putea distinge. Def. 'umarul de ordine al unui octet se numeste adresa lui. Exemplu. ( variabila de tip int ocupa doi octeti. Def. Adresa primului octet al variabilei se numeste adresa variabilei. &emorarea adreselor variabilelor se face cu a)utorul variabilelor de tip pointer. *ariabilele de tip pointer se caracterizeaza prin faptul ca valorile pe care le poate memora sunt adrese ale altor variabile. +imba)ul !"" face distinctie intre natura adreselor care pot fi memorate. Astfel, exista adrese ale variabilelor de tip int, de tip float, de tip char, etc. Declararea unei variabile de tip pointer: tip *nume. Exemplu: int * adr1, * adr2 float , adresa.

Operatori
-. Adresa unei variabile se obtine cu a)utorul operatorului de referinta /01 care trebuie sa preceada numele variabilei: &nume_variabila; exemplu: adr-20numar; -variabilei adr- i se atribuie adresa variabilei numar

3. Pentru a obtine continutul variabilei a carei adresa este memorata , se utilizeaza operatorul unar /,1, numit si operator de dereferentiere, are prioritate 3. Exemplu: 55variabila a este initializata cu valoarea 4, iar variabila adr este ini55 tializata cu adresa lui a, se afiseaza continutul variabilei a74., 55 pornind de la adresa ei, retinuta de adr. 8. (peratorul /.1 9numit operator de selectie, are prioritate -7maxima.. $. (peratorul de selectie directa /-:1- acceseaza un camp al unei structuri pornind de la un pointer catre acea structura. ;xemplu: 7,adra..nume <au +a tiparire: cout66adra-:nume661 /166adra-:prenume; $. =ntre variabilele de tip pointer sunt premise atribuiri doar in cazul in care au acelasi tip de pointer Exemplu: int , adr-,,adr3; float ,adr8; >55 initializari atribuirea: / adr-2adr31 corecta atribuirea: / adr82adr31 nu este corecta !um putem atribui cotinutul unei variabile de tip pointer catre tipul x, altei variabile de tip pointer catre tipul ?@ Raspuns: se utilizeaza operatorul de conversie explicita: adr827float,. adr31 este corect. int a24, ,adr20a; cout66,adr;

Alocarea dinamica in C++


=n !"", pentru alocarea dinamica se utilizeaza urmatorii operatori: -. (peratorul new aloca spatiu in Heap pentru o variabila dinamica. Aupa alocare, adresa variabilei se atribuie lui P, unde P este o variabila de tip pointer catre tip: P=new tip. 'umarul de octeti alocati in Heap ete egal cu numarul de octeti ocupat de o variabila de tipul respectiv. Aurata de viata a unei variabile alocate in Heap este pana la eliberarea spatiului ocupat sau pana la sfarsitul executarii programului. 3. (peratotul delete elibereaza spatial rezervat pentru variabila a carei adresa este retinuta in P. Aupa eliberare, continutul variabilei P este nedefinit. delete P. exemplu: int ,adr-; adr-2neB int; 55aloc spatiu in Heaap pentru o variabila de tip int ,adr-24; 55 variabila alocata retine 4 cout66,adr-; 55 tiparesc continutul variabilei delete adr-; 55eliberez spatiul

Mecanismul alocarii dinamice


<e va prezenta legatura intre pointeri si masive. Fie un tablou p-dimensional care se declara astfel: tip nume [n] [n!]"[np] 'umele tabloului p-dimensional de mai sus este pointer constant catre un tablou p-dimensional de forma Cn3D Cn8D>CnpD , care are componentele de baza de acelasi tip cu cele ale tabloului. Exemplu: float AC-4DC-$DC-3D- tablou cu 8 dimensiuni de tip float - A este pointer constant catre tablouri cu C-$DC-3D componente de tip float En pointer catre un tablou F dimensional cu Cl-DCl3D>ClFD componente de un anumit tip se declara astfel: Gip 7,nume . Cl-D Cl3D>ClFD Exemplu: float 7,p. C$D C3D; -variabila de tip pointer, numita p, care poate retine pe A. =ntrucat numele unui masiv p dimensional este pointer catre un masiv p-- dimensional, pentru a aloca dinamic un masiv se va utiliza un pointer catre masive p-- dimensionale 7ultimele p-dimensiuni..