9
4/17/2011 1 DINAMIČKO DODELJIVANJE MEMORIJE U programskom jeziku C moguće je izvršiti dinamičku dodelu memorijskog prostora, tako da se u toku izvršenja programa koristi samo potreban memorijski prostor. Stati čka dodela je neracionalna. Dinamičkim zauzimanjem memorijskog prostora, koje se obavlja tokom izvršenja programa, postiže se racionalno korišćenje memorije. U toku programa moguće je dodeljivanje i otkazivanje "rezervacije" memorijskog prostora.

Op11 21

Embed Size (px)

DESCRIPTION

Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva. Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja

Citation preview

Page 1: Op11 21

4/17/2011 1

DINAMIČKO DODELJIVANJE

MEMORIJE

• U programskom jeziku C moguće je izvršiti dinamičku dodelu memorijskog prostora, tako da se u toku izvršenja programa koristi samo potreban memorijski prostor. Statička dodela je neracionalna. Dinamičkim zauzimanjem memorijskog prostora, koje se obavlja tokom izvršenja programa, postiže se racionalno korišćenje memorije. U toku programa moguće je dodeljivanje i otkazivanje "rezervacije" memorijskog prostora.

Page 2: Op11 21

4/17/2011 2

DINAMIČKO DODELJIVANJE MEMORIJE

• Za razliku od statičke dodele memorije gde se podacima pristupa preko imena promenljivih, dinamički pristup podacima vrši se uglavnom preko pokazivača. Sama dodela memorije obavlja se uz pomoćbibliotečnih funkcija koje se nalaze u <stdlib.h> kao što su:

• malloc(n) - funkcija dodeljuje memoriju od n bajtova;

• calloc(x,n) - dodeljuje memorijski prostor za x komponenti niza od n bajtova.

• free(p) - oslobađa prostor.

Page 3: Op11 21

4/17/2011 3

malloc

• char *malloc( unssigned n)• gde n predstavlja broj bajtova koje izdvaja

funkcija.• Vreednost funkcije je znakovni pokazivač na

prvi bajt izdvojene oblasti. • Sledeći operatori funkcijom malloc izdvajaju

200 bajta• int *pint • pint = (int*) malloc(200)

Page 4: Op11 21

4/17/2011 4

sizeof

• sizeof (izraz) - Vraća memorijski prostor neophodan za čuvanje izraza

• sizeof (T) - Vraća memorijski prostor neophodan za čuvanje vrednosti tipa T

Page 5: Op11 21

4/17/2011 5

Statička dodela memorije

• Prilikom definicije niza od n članova u pokazivaču nizpočinje sa adresom u memoriji prvog elementa niza.

• int *niz;

• niz=calloc(n,sizeof(int));

• Na ovaj način dodeljivanja memorijskog prostora unapred je definisan broj članova niza n, tj veličina memorije na početku izvršenja program. Ovako se rezerviše n puta 2 (4) bajta jer je sizeof(int) 2 ili 4 u zavisnosti od računara.

Page 6: Op11 21

4/17/2011 6

Dinamička dodelamemorije

• Kada je potrebno rezervisati prostor za pokazivač p sa još nedefinisanim sadrzajem treba napisati sledeće:p=(int*)malloc(sizeof(int);

Page 7: Op11 21

4/17/2011 7

Dinamička dodela memorije

• Rezervisanom prostoru se može pristupiti samo preko pokazivača p naredbom:

• *p=5;

• na adresi 1253 dolazi vrednost 5.

Page 8: Op11 21

4/17/2011 8

• Funkcija free oslobađa prostor u memoriji koji je prethodno rezervisan preko funkce malloc, a čija se adresa nalazila u pokazivaču p.

• free(p)• Vrednost koja se nalazi na toj adresi na

koju je upućivao pokazivač p ostaje , ali• joj se više ne može pristupiti

Page 9: Op11 21

4/17/2011 9

• Vrednost koja se nalazi na toj adresi na koju je upućivao pokazivač p ostaje , ali

• joj se više ne može pristupiti