Динамичка додела меморије

Динамички подаци

Код статичке доделе меморије резервисање меморијског простора обавља се у току превођења програма што значи да је у току превођења програма неопходно знати укупну величину свих података који ће се користити у програму. Код низова се као дужина низа дефинише највећи очекивани број, што доводи до непотребног утрошка меморије.

Због тога је уведена могућност да се за потребе смештања података чији се број и/или величина не зна у време писања и превођења података (НИЗОВИ) додела меморије обавља у току извршавања програма. Такав начин додељивања меморије назива се динамичко додељивање меморије, а подаци смештени у динамички додељену меморију називају се динамички подаци.

Динамички подаци немају имена, већ им се приступа помоћу адреса смештених у показивачима => за динамичке податке неопходно је дефинисати статичке показиваче. Пошто се елементима низа може приступати помоћу само једног показивача => за потенцијално много велики број података у динамичком низу довољан је само један статички показивач!

Динамички подаци стварају се на захтев програмера и постоје све док он не затражи њихово уништавање или док се програм не заврши. При уништавању динамичког податка ослобађа се меморијски простор који је он користио тако да се може користити за смештање неких других динамичких података.

За потребе додељивања меморије у динамичкој зони у програмском језику C++ користе се оператори new и delete. Оператор new служи за додељивање меморије, док оператор delete служи за ослобађање меморије. Динамичко додељивање се најчешће користи за низове, па ћемо употребу ових оператора и објаснити на примеру низова:

int n; cin >> n;
float *a = new float [n]; // pokazivacu a koji pokazuje na podatke tipa float dodeljuje se dinamicki dodeljen prostor za niz od n podataka tipa float 
float z=0;
int i; for (i=0; i<n; i++){cin >> a[i]; z+=a[i];}
cout << z << endl;
delete [] a;

У овом сегменту програма меморија се додељује низу. Запази да се непосредно пре дефинисања динамичког низа уноси његова СТВАРНА дужина (n) на основу које се дефинише показивач на реалне податке обичне тачности смештене у динамичку меморију која садржи n локација за реалне податке обичне тачности. Садржај динамичког низа не може се иницијализовати приликом динамичке доделе меморије, већ је једино могуће накнадно додељивање вредности елеменат по елеменат. У циклусу се уносе елементи низа и израчунава њихов збир који се након циклуса и приказује на екрану. На крају се ослобађа меморија применом оператора delete за низове.


Са динамичким низовима је могуће обављати ИСТЕ операције и функције као и са статичким низовима. Једина разлика је што се меморијски простор додељује приликом извршавања програма и то тачно онолики колики нам треба, и што се за дефинисање низа користи показивач, односно оператор new који врши додељивање меморијског простора.

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s