#include #include #include #include #include #define BUFSIZE (1024) static uint8_t some_large_buf[BUFSIZE] = {0}; typedef struct { uint8_t *buf; size_t buflen; size_t bufptr; } fast_alloc_t; void *fast_alloc(fast_alloc_t *fa, size_t s) { if (fa->bufptr + s > fa->buflen) { return NULL; } void *p = fa->buf + fa->bufptr; fa->bufptr += s; return p; } void fast_alloc_init(fast_alloc_t *fa, uint8_t *buf, size_t buflen) { fa->buf = buf; fa->buflen = buflen; fa->bufptr = 0; } void fast_alloc_wipe(fast_alloc_t *fa) { fa->bufptr = 0; memset(fa->buf, 0, fa->buflen); } int main(void) { fast_alloc_t fa = {0}; fast_alloc_init(&fa, some_large_buf, BUFSIZE); int *a = fast_alloc(&fa, sizeof(int)); *a = 10; int *b = fast_alloc(&fa, sizeof(int)); *b = INT_MAX; printf("Number: %d\n", *a); printf("Number: %d\n", *b); assert(*a == 10); assert(*b == INT_MAX); fast_alloc_wipe(&fa); printf("Number: %d\n", *a); printf("Number: %d\n", *b); assert(*a != 10); assert(*b != INT_MAX); printf("All ok!\n"); }