naprogramovanie malloc() v c

Programovacie jazyky, rady, poradňa...
playerSC
Medium Star
Medium Star
Príspevky: 439
Registrovaný: 25 apr 2008, 17:16

naprogramovanie malloc() v c

Príspevok od používateľa playerSC »

Zdravim mame do skoly spravit program malloc+memory_init+memory_free a ja sa nejak neviem od nicoho odrazit a nemam ziadnu myslienku ako by to slo skodit. Mohol by ma niekto postrcit ktorym smerom mam ist ? Vdaka :)

Zadanie 1 – Správca pamäti

V štandardnej knižnici jazyka C sú pre alokáciu a uvoľnenie pamäti k dispozícii funkcie malloc, a free. V tomto zadaní je úlohou implementovať vlastnú verziu alokácie pamäti.
Vašou úlohou je implementovať TRI funkcie:
void *memory_alloc(unsigned int size);

void memory_free(void *ptr);

void memory_init(void *ptr, unsigned int size);

Vo vlastnej implementácii môžete definovať aj iné pomocné funkcie ako vyššie spomenuté, nesmiete však použiť existujúce funkcie malloc a free.
Funkcia memory_alloc má poskytovať služby analogické štandardnému malloc. Teda, vstupné parametre sú veľkosť požadovaného súvislého bloku pamäte a funkcia mu vráti: ukazovateľ na úspešne alokovaný kus voľnej pamäte, ktorý sa vyhradil, alebo NULL, keď nie je možné súvislú pamäť požadovanej veľkosť vyhradiť.

Funkcia memory_free slúži na uvoľnenie vyhradeného bloku pamäti, podobne ako funkcia free. V prípade, že parameter vstupujúci do volania funkcie nie je (platný) smerník alokovaný funkciou memory_alloc, do nového riadku vypíšte chybovú hlášku Invalid pointer! A program ukončite s návratovou hodnotou 1 (chyba – volanie exit(1) ).
Vaša implementácia správcu pamäti bude hodnotená podľa úspešnosti alokácií vzhľadom na voľné bloky pamäte. Pokiaľ je aspoň 20% voľnej pamäti, mali by ste úspešne prideliť pamäť.

Funkcia memory_init slúži na inicializáciu spravovanej voľnej pamäte. Predpokladajte, že funkcia sa volá práve raz pred volaniami memory_alloc a memory_free. Viď testovanie nižšie. Ako vstupný paramter funkcie príde blok pamäte, ktorú môžete použiť pre organizovanie a aj pridelenie voľnej pamäte.Vaše funkcie nemôžu používať globálne premenné okrem jednej globálnej premennej na zapamätanie smerníku na pamäť, ktorá vstupuje do funkcie memory_init. Smerníky, ktoré prideľuje vaša funkcia memory_alloc musia byť výhradne z bloku pamäte, ktorá bola pridelená funkcii memory_init.

Pred odovzdaním si vlastnú implementáciu dôkladne otestujte. Do testovača by ste mali odovzdávať už funkčnú verziu. Môžete síce do testovača odovzdať aj na viac krát, ale pokiaľ tam bude mať niekto 30 odovzdaných pokusov, niečo asi nie je v poriadku.

Ukážka testu:
#include <string.h>

int main()
{
char region[50];
memory_init(region, 50);

char* pointer = (char*) memory_alloc(10);
if (pointer)
memset(pointer, 0, 10);
if (pointer)
memory_free(pointer);

return 0;
}
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: naprogramovanie malloc() v c

Príspevok od používateľa MeanSeriously »

Čo na tom nechápeš? Veď je to jasné ako facka.
Len ty si to zjavne nepochopil. V zadaní píše, že máš alokovať a následne dealokovať pamäť, čo síce nesmieš urobiť pomocou malloc();, ale hneď ti ponúkajú riešenie (memory_alloc, memory_free, memory_init). Čiže o žiadne "programovanie malloc();" sa nejedná.
playerSC
Medium Star
Medium Star
Príspevky: 439
Registrovaný: 25 apr 2008, 17:16

Re: naprogramovanie malloc() v c

Príspevok od používateľa playerSC »

Nooo a memory_alloc je akoze funkcia ? Zatial som sa s tym nestretol lebo vsetko sme riesili cez malloc a free...
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: naprogramovanie malloc() v c

Príspevok od používateľa MeanSeriously »

aha, sorry, nevšimol som si že to nie je v základnej výbave :) (V C totiž nerobím :) )V každom prípade: http://www.dreamincode.net/forums/topic ... free-in-c/

nečítal som to ale malo by ti to pomôcť vyriešiť tvoj problém
playerSC
Medium Star
Medium Star
Príspevky: 439
Registrovaný: 25 apr 2008, 17:16

Re: naprogramovanie malloc() v c

Príspevok od používateľa playerSC »

Hej hej toto som cital ale vela mi to nedalo. Nakolko mame pevne danu strukturu main-u.
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: naprogramovanie malloc() v c

Príspevok od používateľa MeanSeriously »

aj toto by ti malo pomôcť: http://stackoverflow.com/questions/1957 ... -work-in-c


tu to máš všetko krásne popísané (ukážky začínajú asi od strany8/9): http://www.ibm.com/developerworks/aix/t ... er-pdf.pdf

//Baseilos: Tak ak to bolo dosatačujúce, tak ak to urobí ako v tej príručke od IBM, dostane plný počet :)
//BTW playerCS, ako sa darí? :)
Baseilos
Light Expert
Light Expert
Príspevky: 57
Registrovaný: 01 máj 2011, 2:15

Re: naprogramovanie malloc() v c

Príspevok od používateľa Baseilos »

Tipnem si ze je to zadanie na DSA (Datove struktury a algoritmy) z FIIT STU.

My sme to robili tak, ze memory_init sme si inicializovali cez malloc pole - v priklade pole charov napriklad. A nasledne funkcie memory_alloc a memory_dealloc pracovali nad touto "pametou". Tj. pridelovali volne bloky, uvolnovali, spajali susedne volne bloky atd. Uz si ale nepametam kolko som dostal bodov :).
playerSC
Medium Star
Medium Star
Príspevky: 439
Registrovaný: 25 apr 2008, 17:16

Re: naprogramovanie malloc() v c

Príspevok od používateľa playerSC »

no hej ale ako vytvorim malloc pole ked nesmieme pouzivat malloc ?
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: naprogramovanie malloc() v c

Príspevok od používateľa MeanSeriously »

TU: http://www.ibm.com/developerworks/aix/t ... er-pdf.pdf
to máš chlapče. Mohol si si to aspoň pozrieť. Ak chceš plný počet bodov, Baseilosa nepočúvaj.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: naprogramovanie malloc() v c

Príspevok od používateľa harrison314 »

Keby sa nato opitas cviciaceho tak vies ako si na zaciatku alokovat pamet.
Vsetko ostatne si musis nakodit sam.
playerSC
Medium Star
Medium Star
Príspevky: 439
Registrovaný: 25 apr 2008, 17:16

Re: naprogramovanie malloc() v c

Príspevok od používateľa playerSC »

Myslis ze som nebol najprv za cviciacim a az potom som isiel sem na forum ?...
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: naprogramovanie malloc() v c

Príspevok od používateľa harrison314 »

playerSC napísal:Myslis ze som nebol najprv za cviciacim a az potom som isiel sem na forum ?...
To malo byt prve co trebalo urobit, ved nato su tam:
1, on vie co od vas chce
2, pravdepodobne to vie aj vysvetlit
3, bude to opravovat :!:
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: naprogramovanie malloc() v c

Príspevok od používateľa jorg22 »

Nikdy som take nic nerobil ani by som to nevedel, ale asi by som zacal tak ze by som si pozrel ako je naprogramovany povodny malloc.c
Uz si to skusal?
playerSC
Medium Star
Medium Star
Príspevky: 439
Registrovaný: 25 apr 2008, 17:16

Re: naprogramovanie malloc() v c

Príspevok od používateľa playerSC »

Neskusal lebo k tomuto kodu sa nikde neviem dostat... Skusal som ho hladat ale zatial marne...
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: naprogramovanie malloc() v c

Príspevok od používateľa jorg22 »

ja to mam umiestnene tu:

Kód: Vybrať všetko

....\Microsoft Platform SDK\src\crt\malloc.c
ak sa ti to nepodari najst tak tu to mas upnute
Prílohy
malloc.zip
(2.58 KiB) 241 stiahnutí
Napísať odpoveď