#include #define MAX_I 0x00ffffff #define bool char #define TRUE 1 #define FALSE 0 struct object_s { char val; }; struct block_s { bool busy; struct object_s obj; }; struct block_s pool[MAX_I]; void init() { size_t i; for (i = 0; i < MAX_I; i++) pool[i].busy = TRUE; } #define MAX_B (pool + MAX_I * sizeof(struct block_s)) inline void *alloc() { static struct block_s *b = pool; struct block_s *old_b = b; for ( ; b < MAX_B; b++) if (!b->busy) { b->busy = TRUE; return &b->obj; } for (b = pool; b < old_b; b++) if (!b->busy) { b->busy = TRUE; return &b->obj; } return NULL; } inline void free(void *p) { bool *b = (bool *)(p - sizeof(bool)); *b = FALSE; } int main() { unsigned long long i; for (i = 0; i < MAX_I; i++) alloc(); return 0; }