- 论坛徽章:
- 0
|
昨天看了一下内核的内存池mempool的源码,发现从mempool中申请资源的时候还是先会从公共的内存/缓存中区申请,
当从公共的申请不成功才会从mempool的池中去提取资源使用,源码如下:
void * mempool_alloc(mempool_t *pool, gfp_t gfp_mask)
{
.........
element = pool->alloc(gfp_temp, pool->pool_data);
if (likely(element != NULL))
return element;
spin_lock_irqsave(&pool->lock, flags);
if (likely(pool->curr_nr)) {
element = remove_element(pool);
spin_unlock_irqrestore(&pool->lock, flags);
return element;
}
spin_unlock_irqrestore(&pool->lock, flags);
........
}
既然已经有内存池了,而且池里面的对象显然是已经分配好了的直接提取使用即可,为什么不直接从内存池中提取呢?还有如果用了内存池,申请资源的时候还是从公共的获取那不是有霸占内存的嫌疑?不知道为什么会这样设计,烦请内存大牛解惑一下。
|
|