码迷,mamicode.com
首页 > 其他好文 > 详细

函数mem_pool_create

时间:2015-12-02 01:01:26      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

 

/********************************************************************//**
Creates a memory pool.
@return    memory pool */
UNIV_INTERN
mem_pool_t*
mem_pool_create(
/*============*/
    ulint    size)    /*!< in: pool size in bytes */
{
    mem_pool_t*    pool; 结构体见
    mem_area_t*    area;
    ulint        i;
    ulint        used;

    pool = ut_malloc(sizeof(mem_pool_t));

    pool->buf = ut_malloc_low(size, TRUE);
    pool->size = size;

    mutex_create(mem_pool_mutex_key, &pool->mutex, SYNC_MEM_POOL);

    /* Initialize the free lists */

    for (i = 0; i < 64; i++) {

        UT_LIST_INIT(pool->free_list[i]);
    }

    used = 0;

    while (size - used >= MEM_AREA_MIN_SIZE) {

        i = ut_2_log(size - used);

        if (ut_2_exp(i) > size - used) {

            /* ut_2_log rounds upward */

            i--;
        }

        area = (mem_area_t*)(pool->buf + used);

        mem_area_set_size(area, ut_2_exp(i));
        mem_area_set_free(area, TRUE);
        UNIV_MEM_FREE(MEM_AREA_EXTRA_SIZE + (byte*) area,
                  ut_2_exp(i) - MEM_AREA_EXTRA_SIZE);

        UT_LIST_ADD_FIRST(free_list, pool->free_list[i], area);

        used = used + ut_2_exp(i);
    }

    ut_ad(size >= used);

    pool->reserved = 0;

    return(pool);
}

 

函数mem_pool_create

标签:

原文地址:http://www.cnblogs.com/taek/p/5011765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!