Salut, sunt Serban si acesta este al treizecilea tutorial dintr-o suita de tutoriale ale limbajului C++, tutoriale ce le voi face pentru tutorialevideo.info; In acest tutorial vom discuta despre heap.

Zona de heap este o zona de memorie ce este pastrata in viata pe tot parcursul executiei unui program. Ea exista pentru a permite programatorului sa utilizeze diverse variabile oricand doreste in programul sau. Este o zona de memorie mult mai mare  decat un cadru de stiva al unei functii(depinde si de memorie fizica a calculatorului pe care se programeaza), pentru ca un

program poate fi foarte mare si poate avea nevoie de multe astfel de variabile pastrate pe tot parcursul executiei sale. In C++ se folosesc pointeri pentru a lucra cu variabile alocate pe zona de heap, iar aceste variabile sunt alocate dinamic in aceasta zona. Ceea ce am facut la alocare dinamica(int* a = new int;), urmeaza sa explicam aici. In momentul in care folosim alocarea dinamica(operatorul `new` in C++ sau `malloc`, `calloc`, `realloc` in C), functiile acestea se ocupa de partea de alocare in implementarea lor, iar ce returneaza ele este un pointer la acea adresa, pentru a nu o pierde. Apoi, noi putem manipula acel pointer pentru a lucra in continuare cu acea variabila de la acea adresa de memorie. Zona de heap este dezalocata in momentul in

care s-a terminat executia programului sau cand s-au dezalocat explicit variabilele alocate dinamic in timpul programului.  Exista limbaje care dezaloca implicit acele variabile care sunt alocate dinamic si ulterior sunt pierdute(nu se mai poate ajunge la ele prin intermediul pointerilor sau altor mecanisme). Acestea devin garbage, asa cum sunt denumite, iar un Garbage Collector

are grija sa le dezaloce cand observa comportamentul mai devreme mentionat. Compilatoarele C++ nu au implementat un astfel de mecanism, asa ca programatorului ii revine sarcina sa nu lase zone de memorie garbage in memoria programului sau.

#include<iostream>
#include<string>
using namespace std;

//–––––––––––––
// ret_addr; size; start; array[size], p, i
//–––––––––––––

int* stack_function(int start, int size) {
int array[size];
int *p = new int[size];

for(int i = start; i < size; ++i) {
array[i] = i;
p[i] = i;
}

// return array;
return p;
}

int main() {
int *p, start, size;

cout << „Introduceti indexul de start: „;
cin >> start;

cout << „Introduceti dimensiunea vectorului: „;
cin >> size;

p = stack_function(start, size);

cout << „Primul element al vectorului este ” << *p << endl;
cout << „Al doilea element al vectorului este ” << *(p + 1) << endl;
cout << „Al treilea element al vectorului este ” << *(p + 2) << endl;

return 0;
}
NU uitati: cititi si documentati-va in plus, nu parcurgeti _doar_ aceste tutoriale pentru ca nu sunt indeajuns pentru a va dezvolta calitatile de coding, ci sunt doar mici rampe de lansare catre cunoastere. Dupa fiecare tutorial vizionat, abordati subiectul dezbatut in acesta pe net, in cartea `Thinking in C++`, in sectiunea de comentarii. NU lasati sa treaca pe langa voi o informatie neclara, pentru ca orice farama de cunoastere este importanta.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *