1 typedef struct Pool Pool; 2 struct Pool { 3 char* name; 4 ulong maxsize; 5 6 ulong cursize; 7 ulong curfree; 8 ulong curalloc; 9 10 ulong minarena; /* smallest size of new arena */ 11 ulong quantum; /* allocated blocks should be multiple of */ 12 ulong minblock; /* smallest newly allocated block */ 13 14 void* freeroot; /* actually Free* */ 15 void* arenalist; /* actually Arena* */ 16 17 void* (*alloc)(ulong); 18 int (*merge)(void*, void*); 19 void (*move)(void* from, void* to); 20 21 int flags; 22 int nfree; 23 int lastcompact; 24 25 void (*lock)(Pool*); 26 void (*unlock)(Pool*); 27 void (*print)(Pool*, char*, ...); 28 void (*panic)(Pool*, char*, ...); 29 void (*logstack)(Pool*); 30 31 void* private; 32 }; 33 34 extern void* poolalloc(Pool*, ulong); 35 extern void* poolallocalign(Pool*, ulong, ulong, long, ulong); 36 extern void poolfree(Pool*, void*); 37 extern ulong poolmsize(Pool*, void*); 38 extern void* poolrealloc(Pool*, void*, ulong); 39 extern void poolcheck(Pool*); 40 extern int poolcompact(Pool*); 41 extern void poolblockcheck(Pool*, void*); 42 43 extern Pool* mainmem; 44 extern Pool* imagmem; 45 46 enum { /* flags */ 47 POOL_ANTAGONISM = 1<<0, 48 POOL_PARANOIA = 1<<1, 49 POOL_VERBOSITY = 1<<2, 50 POOL_DEBUGGING = 1<<3, 51 POOL_LOGGING = 1<<4, 52 POOL_TOLERANCE = 1<<5, 53 POOL_NOREUSE = 1<<6, 54 }; 55