内存池的使用
内存池在创建时先从系统中获取一大块内存(静态或动态),然后分成相同大小的多个小内存块,这些小内存块通过链表连接起来(此链表也成为空闲链表)。线程每次申请内存块时,系统从空闲链表中取出链头上第一个内存块,提供给申请者。
也就是说,内存块除了分配的大小外,还有一个指针来链接其他内存块。
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)