Memory Pool C Library Source

Download Version 2.1.0 (5/31/2006)

This is a memory pool library managed multiple heaps that can be allocated and destroyed without fragmenting memory. You can have multiple heaps and reset them easily completely reclaiming the memory (as opposed to standard heaps).

With it you can mpool_open() a new heap, then mpool_alloc(), mpool_calloc(), mpool_realloc(), mpool_free() to your heart's content. Once you are done with the memory-pool you can run mpool_clear() or mpool_close() and completely remove the memory associated with the pools. This is very handy if you are working with some large blocks of memory and want to reset back to a clean state.

Check out the mpool.h file for more information. Sorry for minimal docs. If you have any questions or problems feel free to send me mail.

Gray Watson


mpool_t *mpool_open(const unsigned int flags, const unsigned int page_size, void *start_addr, int *error_p)
Open/allocate a new memory pool.
int mpool_close(mpool_t *mp_p)
Close/free a memory allocation pool.
int mpool_clear(mpool_t *mp_p)
Wipe a memory pool clean so we can start again.
void *mpool_alloc(mpool_t *mp_p, const unsigned long byte_size, int *error_p)
Allocate space for bytes inside of an already open memory pool.
void *mpool_calloc(mpool_t *mp_p, const unsigned long ele_n, const unsigned long ele_size, int *error_p)
Allocate space for elements of bytes in the memory pool and zero the space afterwards.
int mpool_free(mpool_t *mp_p, void *addr, const unsigned long size)
Free an address from a memory pool. This is different from normal free because it needs the addresses size. Future versions of the library will not have that restriction.
void *mpool_resize(mpool_t *mp_p, void *old_addr, const unsigned long old_byte_size, const unsigned long new_byte_size, int *error_p)
Reallocate an address in a memory pool to a new size. This is different from realloc in that it needs the old address' size. If you don't have it then you need to allocate new space, copy the data, and free the old pointer yourself.
int mpool_stats(const mpool_t *mp_p, unsigned int *page_size_p, unsigned long *num_alloced_p, unsigned long *user_alloced_p, unsigned long *max_alloced_p, unsigned long *tot_alloced_p)
Return stats from the memory pool.
int mpool_set_log_func(mpool_t *mp_p, mpool_log_func_t log_func)
Set the Return stats from the memory pool.
int mpool_set_max_pages(mpool_t *mp_p, const unsigned int max_pages)
Set the maximum number of pages that the library will use. Once it hits the limit it will return MPOOL_ERROR_NO_PAGES.

NOTE: if the MPOOL_FLAG_HEAVY_PACKING is set then this max-pages value will include the page with the mpool header structure in it. If the flag is _not_ set then the max-pages will not include this first page.

const char *mpool_strerror(const int error)
Return the corresponding string for the error number.

More 256 Sources
Gray Watson Land