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.
Implementácia Malloc() a Free() v jazyku C.
Vypracované zadanie:zadanie.zip
Žiadne komentáre:
Zverejnenie komentára