现在的位置: 首页 > 综合 > 正文

APACHE Apr_pools.c apr_palloc函数的理解

2013年03月25日 ⁄ 综合 ⁄ 共 1791字 ⁄ 字号 评论关闭

 APR_DECLARE(void *) apr_palloc(apr_pool_t *pool, apr_size_t in_size)
{
    将in_size调整为index整数倍的
    /*先查看active节点,active是内存池中的激活节点,所有的内存都从这个节点中分配*/
    if(active节点就能够满足分配要求)
    {
        直接从active分配内存
        返回了
        /*这里不会往下执行,直接返回了,也就不会理睬在active分配内存之后,还是不是链表中的最大

节点,所以tingya的对这个地方的解释不完全正确,应该是active节点是不会理睬有多大的,反正所有的内存都从

active节点分配,当active节点不够分配时,就更换active节点.从active->next开始的链表,是按照可用空间从大

到小排序的*/
    }
    查看active->next节点/*是链表中最大的节点,如果这个节点都不够分,就只能从分配子中提取节点了*/
    if(active->next节点能够满足要求)
    {
        把这个节点从链表中提取出来,用node表示;
    }
    else
    {
        从分配子从获取节点,用node表示;
    }
    
    /*此时内存已经分配出来了,并且是从node节点中分配的*/
    /*所以接下来我要用node把active替换掉,让active回到链表中,并且是回到排序后的位置上,看代码:*/
    
    把node放到active链表头,即挤掉原active的位置
    用active的可用大小去和链表后面的节点依次做比较,插入到合适的位置.
    /*因为每次我都做的是相同的操作,所以我不需要再对整个链表进行排序就可以保证链表是从大到小排序

的*/
    返回内存起始地址;
}

 

 

抱歉!评论已关闭.