Implementacia spravy dynamickej pameti

Programovacie jazyky, rady, poradňa...
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

Implementacia spravy dynamickej pameti

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

Implementujte správu dynamickej pamäti. Základná vlastnosť DP je :
- logicky susedné položky nemusia byť fyzicky susedné.
Spravujte DPND, t.j. uvažujte prvky s rôznou dĺžkou. Ich dĺžku si primerane obmedzte tak, aby Ste mohli demonštrovať jednotlivé operácie s položkami a ich správu ( ako sa to prejaví na ich reťazení).Minimálne sú to tieto operácie:
- vyžiadanie si pamäti pre zápis položky
- uvoľnenie pamäti a
- signalizáciu plnej pamäti

// zjednodusene mam urobit akoze vytvorit vlastnu funkciu malloc a free, teda pomocou statickych funkcii vytvorit dynamicku pamet a na ukazat na priklade.
Nevedel by s tym prosim Vas niekto pomoct ?
Programovat by sa malo v jazyku C. :)
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

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

nemas to nahodou na datove struktury a algoritmy na FIIT? :)

tu je spravena funkcia na zretazenu volnu pamat, ale v C++

tu je to trosku aj popisane a je tam aj kod, ale v Pascale - mnoho spoluziakov to riesilo prave prepisanim C :)

len je problem, ze tieto kody su myslim obidva pre rovnake prvky, ale v zadani je, ze mas uvazovat nerovnake..ale ak to mas skutocne na DSA, tak cviciaci bude rad, ze mas aspon nieco :wink:
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

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

hej je to na DSA :)

dik aspon zato nieco, ale asi netusis akym sposobom by sa to malo robit ak chcem mat v pameti prvky s nerovnakou dlzkou ? :)
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

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

no to veru netusim..ale viem, ze malokto spravil aj tie rovnake prvky, takze sme nakoniec k tomu zadaniu pouzivali aj tak malloc() :D
guitarista25
Amateur
Amateur
Príspevky: 15
Registrovaný: 12 nov 2007, 15:14

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

Jaaj :D
tak skusim do nej nieco hustit, aby aspon videla ze tomu rozumiem.
Dufam ze aspon zato dostanem dva body :)
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

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

guitarista25 napísal:hej je to na DSA :)

dik aspon zato nieco, ale asi netusis akym sposobom by sa to malo robit ak chcem mat v pameti prvky s nerovnakou dlzkou ? :)
volakedy som robil trosku podobny modul do C ktory sa mal vyuzivat na alokaciu velkeho mnozstva malych objektov takze sa konal len jedno zaverecne free... vytvoril som jedno velke pole(napr. 512) (neskor dve aby sa dali alokovat pvky vacsie ako je samotne pole ale to je o inom) ktore sluzilo na pridelovanie pamati lubovolnej velkosti ... struktura potom obsahovala ukazatel na pole, velkost alokovanych bytov a ukazatel na dalsie pole keby sa hento pole zaplnilo (to asi nebudes potrebovat kedze iba na demonstraciu). samotne pridelovanie potom prebiehalo tak ze si uzivatel vyziadal velkost pamate, ktora mi dosla ako parameter.ten som pripocital k vyuzitej pamati a o tuto velkost som posunul ukazatel na volny prvok. potom som vratil neposunuty ukazatel.

k tvojmu pripadu: trochu som to kukol a ak som spravne pochopil tak by to malo zvladat alokaciu prvkou roznej velkosti ale vsimol som si par "nedokonalosti"
1) vratenie indexu do pola pamate.... koho trapi ako je pamat reprezentovana...vratim ukazatel na vyhradenu pamate pre pouzivatela ...dostal co chcel a moze si s tym robit co chce...citat, zapisovat, (ne)pouzit ako sa mu paci
2) presuvanie prvkov pri dispose jedneho prvku aby to bolo ponzistentne... situacia: pouzivatel si 2x poziada o pamat. ta mu je pridelena. vytvori si ukazatel na pamat pre svoju potrebu. prvy prvok potom uvolni a tam sa potom posunu dalsie ale ukazatel posunut nemozes. ked potom alokuje dalsi kus pamate dostane tu na ktoru mal ukazatel. cize ukazatel potom ukazuje inam ako pouzavatel si mysli a navyse data na ktore by mal ukazovat prepise pri zapise do tretieho prvku a ucite bude dost zmatany

riesenie:
1) nepouzivat index na identifikaciu objektu ale ukazatele. pri uvolnovany potom nehladat index ale porovnavat adresy kam ukazatele ukazuju
2)zasadne nepresuvat prvky ale pamatat si kde mam volnu (nevyhradenu) pamat a porovnavat jej velkost s tou kolko mam pridelit.
Napísať odpoveď