果然只是一个pool阿……
一个小小的疑问:为什么所有的调试信息不是assert,也不是fprintf(stderr, 呢?
另外,一般在需要内存池的时候(大规模的内存分配占用大量系统资源),都是只需要分配同一个大小的内存的。管理多个大小的内存池是低效以及臃肿的。我看你还不如设计一套API,根据传入的初始大小做一个内存池。做得时候用块状链表实现,删除和分配效率会很高(别忘了在内存中设置空闲块链)。
最后,一个成熟的商业内存管理系统,所有的管理信息都是不另占用空间的,而是使用空闲内存的空间,这样比较节省,你可以考虑这样改进。
可以尝试这样一套API:
mpool_T memory_pool_new(size_t size);
void *memory_pool_alloc(mpool_T mp);
void memory_pool_free(mpool_T mp, void* mem);
void memory_pool_delete(mpool_T mp);
其中mpool_T是不透明的指针,你在头文件作前置声明,然后在实现文件里面定义,防止关键数据被修改。