Skip to content

Instantly share code, notes, and snippets.

@vanaur
Created July 25, 2020 14:42
Show Gist options
  • Save vanaur/e6544f1cb1647abb0fea69e47d499ede to your computer and use it in GitHub Desktop.
Save vanaur/e6544f1cb1647abb0fea69e47d499ede to your computer and use it in GitHub Desktop.
typedef struct pool_s
{
char *next;
char *end;
} pool_t;
pool_t *pool_create(const size_t sz)
{
pool_t *p = malloc(sz + sizeof *p);
assert(p != NULL);
p->next = (char*)&p[1];
p->end = p->next + sz;
return p;
}
void pool_free(pool_t *p)
{
free(p);
}
size_t pool_aviable(const pool_t *p)
{
assert(p != NULL);
return p->end - p->next;
}
void *pool_alloc(pool_t *p, const size_t sz)
{
assert(p != NULL);
if (pool_aviable(p) < sz) return NULL;
void *mem = (void *)p->next;
p->next += sz;
return mem;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment