štvrtok 30. októbra 2008

Zadanie na predmet DSA č.1

Zadanie na predmet DSA č.1

Text zadania:

Každý z vás už by mal poznať funkcie

void *malloc(size_t size);
void free(void *ptr);

a aj to, na čo slúžia. Tieto sú k dispozícii v štandardnej knižnici jazyka C. V rámci prvého zadania sa máte možnosť zoznámiť s tým, ako sa podobná funkcionalita implementuje.

Vašou úlohou je implementovať funkcie:

void *Malloc(int size);
void Free(void *ptr);
int MaxSize();
void Init();

Pričom

  • Môžete definovať aj iné pomocné funkcie okrem tých, ktoré tých štyroch, ktoré su hore spomenuté.
  • Váš Malloc má poskytovať podobné služby ako štandardný malloc. T.j. programátor zadá veľkosť úseku pamäte, ktorý chce alokovať a táto funkcia mu vráti:
    • buď ukazovateľ na začiatok kúsku voľnej pamäte, ktorý sa podarilo alokovať,
    • alebo NULL keď nie je možné alokovať kus pamäte uvedenej veľkosti.
  • Váš Free má podobné služby ako štandardný free.
  • Do funkcie Init sústreďte inicializáciu vami spravovanej voľnej pamäte. Ak žiadna inicializácia nie je potrebná, bude mať táto funkcia prázdne telo (ale musí byť definovaná). Môžte počítať s tým, že programátor zavolá funkciu Init práve raz pred prvým použitím vášho Malloc-u.
  • Funkcia MaxSize vráti najväčší možný počet bajtov, ktorý je možné z vami spravovanej pamäte (pomocou Malloc-u) alokovať bez toho, aby alokácia zlyhala kvôli tomu, že už nie je dosť voľnej pamäte.

Vo svojom programe nesmiete použiť ani malloc ani free. Vaše Malloc a Free funkcie kľudne môžu operovať nad nejakým poľom, ktoré je alokované staticky ako globálna premenna. Napr.:

char memory[2000];

Mali by ste to mať implementované tak, že:

  • tesne po inicializácii (zavolaní funkcie Init) mi pokus o alokovanie aspoň 1024 bajtov uspeje.
  • tesne po inicializácii mi pokus o alokovanie jedného bajtu uspeje aspoň 1024-krát po sebe.
  • keď pomocou Free odalokujem všetko to, čo som si pomocou Malloc alokoval, tak by funkcia MaxSize mala vrátiť to isté číslo, aké vráti tesne po Init-e.
dostupné na http://altair.sk/mediawiki/index.php/DSA#Prv.C3.A9_zadanie

Implementácia Malloc() a Free() v jazyku C.
Vypracované zadanie:zadanie.zip

Žiadne komentáre: