内存池的使用

内存池的使用

​ 内存池在创建时先从系统中获取一大块内存(静态或动态),然后分成相同大小的多个小内存块,这些小内存块通过链表连接起来(此链表也成为空闲链表)。线程每次申请内存块时,系统从空闲链表中取出链头上第一个内存块,提供给申请者。

​ 也就是说,内存块除了分配的大小外,还有一个指针来链接其他内存块。

struct rt_mempool
{
    struct rt_object parent;
    void	*start_address;
    rt_size_t	size;
    rt_size_t	block_size;
    rt_uint8_t	*block_list;
    rt_size_t	block_total_count;
    rt_size_t	block_free_count;
    rt_list_t	suspend_thread;
    rt_size_t	suspend_thread_count;
}
typedef struct rt_mempool *rt_mp_t;
struct rt_mempool static_mp;
rt_mp_t dynamic_mp;

初始化与脱离

rt_err_t rt_mp_init(struct rt_mempool *mp,const char*name,void *start,
                   rt_size_t size,rt_size_t block_size)
rt_err_t rt_mp_detach(struct rt_mempool *mp)

创建与删除

rt_mp_t rt_mp_create(const char*name,rt_size_t block_count,rt_size_t block_size)
rt_err_t rt_mp_delete(rt_mp_t mp)

申请内存块

void *rt_mp_alloc(rt_mp_t mp,rt_int32_t time)

释放内存块

void rt_mp_free(void *block)
原文地址:https://www.cnblogs.com/zhang-han/p/14123135.html