内存管理API之mempool_free
2018-02-02 08:17
375 查看
void mempool_free(void *element, mempool_t *pool)用于将已经申请的缓存归还给缓存池 其源码分析如下: void mempool_free(void *element, mempool_t *pool) { unsigned long flags; #缓存为null则退出 if (unlikely(element == NULL)) return; smp_rmb(); #min_nr 代表缓存池能提供的最小内存,而curr_nr代表缓存池当前剩下的内存,由于min_nr #只有在紧急情况下使用,因此一般情况下curr_nr 都是大于min_nr的 if (unlikely(pool->curr_nr < pool->min_nr)) { spin_lock_irqsave(&pool->lock, flags); if (likely(pool->curr_nr < pool->min_nr)) { #将用户释放的element 重新加到缓存池中 add_element(pool, element); spin_unlock_irqrestore(&pool->lock, flags); #唤醒等待队列,目前已经有人释放内存了,可以再次申请 wake_up(&pool->wait); return; } spin_unlock_irqrestore(&pool->lock, flags); } #非紧急模式仅仅调用free函数指针释放内存. pool->free(element, pool->pool_data); }
相关文章推荐
- 内存管理API之mempool_alloc_pages和mempool_free_pages
- 内存管理API之mempool_alloc_slab和mempool_free_slab
- 内存管理API之mempool_resize
- 内存管理API之nr_free_buffer_pages
- 内存管理API之__free_pages
- 内存管理API之__get_free_pages
- 内存管理API之mempool_create
- 内存管理API之mempool_alloc
- 内存管理API之free_pages_exact
- 内存管理API之free_vm_area
- 内存管理API之mempool_create_kmalloc_pool
- 内存管理API之kmem_cache_free
- 内存管理API之mempool_destroy
- 内存管理API之free_pages
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- Linux内存管理之kmalloc 与 __get_free_page()
- Goslate: Free Google Translate API
- 自己写的STM32 内存管理 实现了malloc,free,remalloc等函数
- Linux之glibc内存管理malloc和free
- 内存管理API之ksize