?????????????????????锟�?

????1?????????椤�???cleanup??clean_tail???????????????????????????????????????????????????????????????尾???

????2???????锌????????小?????size?????????伞?

????3??????渭???????????heap???????畏????????????????????

????????????????????????????????????????????????????????????????????????????些??????

??????????????????????

??????????????????????????????????????????pool_t?????????????????NULL????小?0?????????魏蔚????椤�

pool_t _pool_new()
{
    pool_t p;
    while((p = malloc(sizeof(_pool))) == NULL) sleep(1);
    p->cleanup = NULL;
    p->heap = NULL;
    p->size = 0;
    return p;
}

????????????????小??????

?????????????????小?size???????????????????????????????????????????????????????椋�??????????????????校?????????????????????尾?????????瓒�???

pool_t _pool_new_heap(int size)
{
    pool_t p;
    p = _pool_new();
    p->heap = _pool_heap(p??size);
    return p;
}

????????????????_pool_new?????????????????????????????????????????????????????????

static struct pheap *_pool_heap(pool_t p?? int size)
{
    struct pheap *ret;
    struct pfree *clean;

    while((ret = _pool__malloc(sizeof(struct pheap))) == NULL) sleep(1);
    while((ret->block = _pool__malloc(size)) == NULL) sleep(1);
    ret->size = size;
    p->size += size;
    ret->used = 0;

    clean = _pool_free(p?? _pool_heap_free?? (void *)ret);
    clean->heap = ret; /* for future use in finding used mem for pstrdup */
    _pool_cleanup_append(p?? clean);

    return ret;
}

??????????????????些??????

????1???????????小?size?????椋�???????薪????pheap????

????2?????????????小size?????????????????p->size += size??

????3?????????????struct pfree???????????????????????????????????????

????4????struct pfree??????????????????????????尾??

??????????????3???4????????????