1 / 9

Mäluhaldus

Mäluhaldus. Risto Heinsar & Ott Madis Ozolit. Mälu olemus. Igal andmetüüp nõuab meilt kindla koguse mälu. Ava http://blue.pri.ee/tty - > prog2 -> koodinaited -> suurused.c T äienda koodi! s izeof () funktsioon abiks !

yered
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 Risto Heinsar & Ott Madis Ozolit

  2. Mäluolemus • Igalandmetüüpnõuab meilt kindla koguse mälu. • Ava http://blue.pri.ee/tty -> prog2 -> koodinaited -> suurused.c Täienda koodi! • sizeof() funktsioon abiks! • Antud mälumahud võivad varieeruda erinevatel protsessorite arhitektuuridel, kompilaatoritel ja operatsioonisüsteemidel

  3. Mäluolemus • Igalandmetüüpnõuab meilt kindla koguse mälu : • Char – 1 bait • Int – 4 baiti • Float – 4 baiti • Double – 8 baiti • sizeof() funktsioon abiks! • Antud mälumahud võivad varieeruda erinevatel protsessorite arhitektuuridel, kompilaatoritel ja operatsioonisüsteemidel

  4. 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 viitasid kasutades • Küsitud mäluhulk vabastatakse, kui seda enam vaja ei ole • Mõneti sarnane failide kasutamise fopen() ja fclose() põhimõttele.

  5. Mälu küsimine mallociga • Mälu küsime funktsiooniga malloc(); • Mallocit kasutades küsime mälu varemalt deklareeritud viidale • 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);

  6. 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));

  7. 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)

  8. Järgmisest kodutööst • Kodutöö PEAB sisaldama dünaamilist mälujaotust! • Samuti kehtivad eelmise kodutööga sätestatud põhimõtted: funktsioonid, failid, struktuurid, treppimine • Kodutöö variandid: • Valid ise teema, kooskõlastad meiega enne tegemist (nt sõber vajab programmi oma filmikogu haldamiseks) • Kui kohe head ideed pähe ei tule, siis meie käest saad variandi järgmise nädala tunnis. • Tähtaeg: KT2 toimumise aeg! • Kodutöö 2: 15% lõpuhindest

  9. Tunnitöö • Kirjutaprogrammmis: • küsibkasutajaltnnegatiivset täisarvu • salvestab arvud dünaamilist mälujaotust kasutavasse massiivi • sorteerib need arvudkasvavasvõikahanevasjärjekorras • 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