Defragmentacija pomnilnika

2»

Komentarji

  • Fragmentacija pomeni razdrobljenost. Lahko imas fragmentirane datoteke na disku ali pa podatke v glavnem pomnilniku (pri ostranjevanju). Vse skupaj nastane na podlagi dodajanja in brisanja. Vsak podatek zasede neko koncno stevilo "blokov". Recimo da si prej imel nekaj kar je zasedalo 4 bloke. Potem tisto zbrises nato pa hoces dodati nekaj kar je veliko 3 bloke in nekaj kar je veliko 2. V prazen prostor lahko spravis tisto prvo zadevo in ti ostane se en blok. Zato moras tisto drugo razdeliti na dva dela.

    "Metode pisanja v pomnilnik" pomenijo samo kako izkoristis prazne prostore. Imas moznosti "best match", "worst match" ali "random".
    Prva pomeni, da poskusas najti cimbolj podobno luknjo - ce hoces zapisati 4 bloke bos nasel recimo prostor velik 5 (to se sicer slisi super - ampak
    v praksi s tem dobis veliko zelo majhnih "lukenj", ki se jih ne da vec na noben nacin izkoristiti). Defragmentacija ali strjevanje je to, da ti vse podatke premaknes tako da so luknje skupaj.

    > na primer garbage collection, tehnika za samodejno sproščanje neuporabnih objektov v pomnilniku, je znana po tem da naj bi povzročila veliko
    > fragmentacije v pomnilniku. Verjetno ima jedro kakšen način za zmanjšanje fragmentacije.

    Zakaj naj bi garbage collection povzrocil vec fragmentacije kot ce sam skrbis za alokacijo in sproscanje?
    To ni logicno.

    Ko ti klices malloc() / new oz. free() / delete dejansko ne dobis pomnilnika od jedra - ampak se uporablja ponavadi nek alokator v uporabniskem prostoru. Kernel ti da samo vecji kos pomnilnika s katerim potem tista stvar (npr. Doug Lea alokator) upravlja.
Za komentiranje se prijavite ali pa se vpišite.