1 / 9

Mäluhaldus

Mäluhaldus. Mälu olemus. Iga andmetüüp nõuab meilt kindla koguse mälu : Char – 1 bait Int – 4 baiti Float – 4 baiti Double – 8 baiti Struct – structi elementide summa Union – suurima elemendi suurus s izeof () funktsioon abiks !

ulla
Download Presentation

Mäluhaldus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mäluhaldus

  2. Mäluolemus • Igaandmetüüpnõuab meilt kindla koguse mälu : • Char – 1 bait • Int – 4 baiti • Float – 4 baiti • Double – 8 baiti • Struct – structi elementide summa • Union – suurima elemendi suurus • sizeof() funktsioon abiks! • Antud mälumahud võivad varieeruda erinevatel protsessorite arhitektuuridel, kompilaatoritel ja operatsioonisüsteemidel

  3. Dünaamilise mälu kasutamise põhimõtted • Lisame programmile teegi <malloc.h> • Kõiki massiive deklareerime viitadena • Programmeerija küsib igale soovitud andmehulgale vajaliku mälumahu (NB! Peab jälgima, et mitte küsida liiga palju või vähe!) • Küsitud mälus liigume soovitavalt viitasid kasutades • Küsitud mäluhulk vabastatakse, kui seda enam vaja ei ole • Mõneti sarnane failide kasutamise fopen() ja fclose() põhimõttele.

  4. Mälu küsimine malloc() funktsiooniga • Prototüüp:void* malloc (size_tsize); • Parameetriks: küsitava mälu suurus baitides • Tagastuseks: (void) tüüpi pointer allokeeritud mäluala algusele • malloc() -> abikssizeof() funktsioon • Kõik küsitud mälu tuleb vabastada käsitsi funktsiooniga free(); • viit=(andmetüüp*)malloc(sizeof(andmetüüp)*n); • free(viit);

  5. Malloci realisatsioon koodis • Kõik operatsioonid kolivad viitade peale üle! St nüüdsest me ei deklareeri enam kindla pikkusega massiivi, vaid viida, millele anname vastavalt vajadusele mälu! • Vanasti: intmassiiv[10]; • Nüüd: int*massiiv; massiiv =(int*)malloc(n *sizeof(int));

  6. Pointeraritmeetika #include <stdio.h> #include <malloc.h> intmain(void) { int*p,i; p=(int*)malloc(3*sizeof(int)); *(p+0)=5; *(p+1)=3; *(p+2)=7; for(i=0;i<3;i++) printf("%p, %d\n",(p+i),*(p+i)); free(p); return 0; } *p48F9AC91 5 3 7 *(p+0) *(p+1) *(p+2)

  7. Pointeraritmeetika jätkub #include <stdio.h> #include <malloc.h> intmain(void) { int*p,*p2,i=0; p=(int*)malloc(3*sizeof(int)); *(p+0)=5; *(p+1)=3; *(p+2)=7; for(p2 =p;i<3;p2++ ,i++) printf("%p, %d\n", p2,*p2); free(p); return 0; } *p48F9AC91 *(p + 2) *(p + 0) *(p + 1) 5 3 7 *p2

  8. Kodutöö • Läbi vaadata ja endale lahti mõtestada • http://www.youtube.com/watch?v=_8-ht2AKyH4&list=TLn7hcrtQgrIsNuGQujVnwzM8jbtxwTgrb

  9. Tunnitöö • Kirjutaprogrammmis: • küsibkasutajaltnnegatiivset täisarvu • salvestab arvud dünaamilist mälujaotust kasutavasse massiivi • sorteerib need arvudkahanevas järjekorras – selleks kasuta qsort() funktsiooni • väljastabniialgseseisu,kuikalõpptulemuse,eraldiväljundfailidesse • NB!Kõikelementaarsednõudedtäita (failikontroll, teegid, jne) • NB! Kõik massiiviga teostatavad operatsioonid tuleb teha viitadega

More Related