pool结构中的cleanup指向pfree链表头,cleanup_tail顾名思义指向链表末尾.
pool->size是所有heap的size的总和.
pool->heap指向当前的堆pheap
pfree是一个用来追踪(Tracker)或者说索引所有已分配heap的链表节点,
pfree中包含的回调函数指针负责所指heap的实际释放.
pheap包含已分配内存实体信息.
分配过程 **void *pmalloc(pool_t p, int size)**:
如果当前heap为初始化或者(请求分配的size > 当前heap->size/2), 则直接通过_pool_free创建一块原始内存区域,用pfree记录下来,就直接返回.
否则:
先进行内存对齐,
然后判断当前heap里是否有足够的剩余空间,没有则新建一块heap
然后按实际指针位置返回可用内存区域.
释放过程 void pool_free(pool_t p)
遍历cleanup列表,逐个释放pfree->pheap和pfree自身.
最后释放pool自身.
几乎不用内存池, 只看出这些, 评价:无