2 // Heap of fixed size objects, fast to alloc and especially to totally free
9 extern int account,currmem,newmem,maxmem;
12 // Creates a heap of elements of size siz
14 heap createHeap (uint siz)
17 H = malloc (sizeof(struct sheap));
19 H->cap = BLK/siz; if (H->cap == 0) H->cap = 1;
29 // Gets a new element from H
31 void *mallocHeap (heap H)
37 newmem = currmem+H->siz;
38 if (newmem > maxmem) maxmem = newmem;
39 if (currmem/1024 != newmem/1024)
40 printf ("Memory: %i Kb, maximum: %i Kb\n",newmem/1024,maxmem/1024);
44 { elem = (void*)H->free;
48 if (H->first != H->cap)
49 { elem = (void*)(((uint)(H->blocks+1)) + H->first * H->siz);
56 b = malloc (sizeof(void*) + H->cap * H->siz);
62 elem = (void*)(H->blocks+1);
67 // Frees ptr from heap H
69 void freeHeap (heap H, void *ptr)
75 newmem = currmem-H->siz;
76 if (currmem/1024 != newmem/1024)
77 printf ("Memory: %i Kb, maximum: %i Kb\n",newmem/1024,maxmem/1024);
85 // Frees everything in heap H
87 void destroyHeap (heap H)
93 while ((b = H->blocks) != NULL)
99 newmem = currmem-H->totsize*H->siz;
100 if (currmem/1024 != newmem/1024)
101 printf ("Memory: %i Kb, maximum: %i Kb\n",newmem/1024,maxmem/1024);