Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
rosina.jakub
Člen
Avatar
rosina.jakub:7.10.2018 2:41

Čaute,
vedel by mi niekto pomôcť s implementovanim vlastne malloc funkcie? Musí ísť o obojsmerne spájaný zoznam. Dosť sa s tým trápim a už mám málo času.

Ďakujem

 
Odpovědět 7.10.2018 2:41
Avatar
V-D.sk
Člen
Avatar
Odpovídá na rosina.jakub
V-D.sk:7.10.2018 16:30

nechapem, co potrebujes? Aby ti niekto spravil obojsmerne zretazeny zoznam?

 
Nahoru Odpovědět 7.10.2018 16:30
Avatar
Odpovídá na rosina.jakub
Matúš Olejník:7.10.2018 17:39

Ahoj, asi by si mal poslať viacej informácií ohľadom toho zadania. Keďže niečo podobné som na FIITke kedysi riešil :D tak predpokladám, že máte jeden globálny pointer, ktorý bude ako keby vaša celková dostupná pamäť a máte implementovať nejaké funkcie ako memory_init kde tým pointerom ukážeš na testom alokovanú pamäť. Potom treba implementovať niečo ako memory_alloc kde by si mal vytvoriť nejakú štruktúru nazvime ju memory_block v ktorej bude musieť byť hlavička s informáciami koľko daný blok má priradenej pamäte a či je aktuálne využívaný (nebola na ňom zavolaná funkcia memory_free) a ešte, keďže to máš robiť cez spájaný zoznam, bude musieť ukazovať na ďalší blok za ním.
Takže hneď na začiatku bude jeden blok s informáciu že je voľný a koľko pamäte je voľnej. Potom ak niekto zavolá memory_alloc(size) tak pozreš do prvého bloku a ak je voľný tak za začiatok bloku + size vytvoríš nový blok so zostávajúcou pamäťou a vrátiš pointer na ten alokovaný blok atď..ťažko sa to zo šupy opisuje :D Ak máš implementovať aj funkciu memory_free tak v nej príde ako parameter pointer na blok ktorý sa má uvoľniť a to pre teba bude znamenať že v hlavičke toho bloku nastavíš, že sa blok aktuálne nevyužíva, prípade spravíš nejaký merge voľných blokov (defragmentáciu).

Ak to nie je niečo na takýto spôsob, tak to ignoruj :D

Nahoru Odpovědět 7.10.2018 17:39
/* I am not sure why this works but it fixes the problem */
Avatar
rosina.jakub
Člen
Avatar
Odpovídá na Matúš Olejník
rosina.jakub:7.10.2018 20:51

Je to presne to čo potrebujem. Len mám dosť problém s tou implementáciou.

 
Nahoru Odpovědět 7.10.2018 20:51
Avatar
rosina.jakub
Člen
Avatar
Odpovídá na Matúš Olejník
rosina.jakub:7.10.2018 21:07

My to musíme ale riešiť explicitne, takže smerník mi neodkazuje na ďalší v poradí ale na ďalší voľný blok, preto obojsmerne spájaný zoznam.

 
Nahoru Odpovědět 7.10.2018 21:07
Avatar
Odpovídá na rosina.jakub
Matúš Olejník:8.10.2018 10:59

Skús možno poslať trocha viacej k tomu zadaniu, ale neviem ako budem stíhať.

Nahoru Odpovědět 8.10.2018 10:59
/* I am not sure why this works but it fixes the problem */
Avatar
rosina.jakub
Člen
Avatar
rosina.jakub:8.10.2018 11:01

Je to presne to čo si písal. Tiež som na FIIT-ke. Jediný rozdiel v tom čo si napísal ty je, že smerníky mi neodkazujú na ďalší a predošlý blok v poradí ako idú za sebou ale odkazujú na ďalší a predchádzajúci voľný blok.

 
Nahoru Odpovědět 8.10.2018 11:01
Avatar
Caster
Člen
Avatar
Caster:17.10.2018 0:34

Je otázka, jak velkou pamět potřebuješ alokovat. Pokud jde např. o načtení celého souboru a pak s daty pracovat v paměti, lze použít funkci VirtualAlloc, se kterou můžeš alokovat klidně i několik GB paměti.

 
Nahoru Odpovědět 17.10.2018 0:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.