10 static void donate(unsigned char *base, size_t len)
12 uintptr_t a = (uintptr_t)base;
13 uintptr_t b = a + len;
17 for (int sc=47; sc>0 && b>a; sc-=4) {
18 if (b-a < (size_classes[sc]+1)*UNIT) continue;
19 struct meta *m = alloc_meta();
28 *((unsigned char *)m->mem+UNIT-4) = 0;
29 *((unsigned char *)m->mem+UNIT-3) = 255;
30 m->mem->storage[size_classes[sc]*UNIT-4] = 0;
31 queue(&ctx.active[sc], m);
32 a += (size_classes[sc]+1)*UNIT;
36 void __malloc_donate(char *start, char *end)
38 donate((void *)start, end-start);