Olyanra könyvtárra lenne szükségem, ami egy előre lefoglalt memóriaterületen (pl egy 1Gb-os blob) belül tud kisebb falatokat allokálni. Pontosan ugyanúgy, mint a "sima" malloc, annyi eltéréssel, hogy az adott blob területéről veszi a memóriát.
A terület, amit használhat, már megvan előre, a lib megkapja a kezdetét és a méretét inicializáláskor.
Így gondolom:
malloc_context * ctx=mymalloc_create_context(void * blobStart, long blobLength)
void * lefoglalt_darab=mymalloc_alloc(ctx, long size);
Majd használat után:
mymalloc_free(ctx, lefoglalt_darab);
Elég sokat gugliztam, de olyat nem találtam, ami nem építene mallocra, vagy mmap-ra.
Úgy is fogalmazhatnám, hogy a malloc implementációját kellene kibányásznom, és az inicializálásába bele nyúlni tudnom. Ismertek erre kész megoldást?
szerk: imp javaslata alapján a Doug Lea dlmalloc könyvtárat megnéztem, ami mspace_malloc néven eleve tartalmazza ezt a feature-t, sőt az ONLY_MSPACES fordítási kapcsolóval beállítható, hogy a "sima" malloc-ot ne is definiálja. Lásd: http://g.oswego.edu/dl/html/malloc.html
Mindenkinek köszönöm a válaszokat!
Hozzászólások
Egyik kollégám ez alapján írt hasonló allokátort, mint amilyen neked kell:
http://g.oswego.edu/dl/html/malloc.html
Pont ez kell :-). Köszönöm!
esetleg ha valami mikrokontrolleres implementaciobol kiszeded es/vagy azalapjan? pl avr-libc? nem neztem ezekbe bele me'g, de nem kizart hogy ezek alapjan el lehet indulni. talan nem annyira primitiv mint egy sima lancolt lista's (ami pl anno dos alatt volt) viszont pont az eroforrasok vegessege miatt nem is lehet annyira bonyolult, hogy ne lehessen megerteni.
apache valamelyik c libjeben van ilyen pool allocator
--
NetBSD - Simplicity is prerequisite for reliability