jabberd 2 内存池模型

Image

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自身.

几乎不用内存池, 只看出这些, 评价:无