RTTHREAD内存池

内存池;连续的大小相同的内存块 ,便于内存管理 减少碎片化。 支持挂起功能。列表的形式储存

struct rt_mempool
{
    struct rt_object parent;                            /**< inherit from rt_object */

    void            *start_address;                     /**< memory pool start */ 内存池地址
    rt_size_t        size;                                  /**< size of memory pool */内存池总大小

    rt_size_t        block_size;                        /**< size of memory blocks */ 小内存块大小
    rt_uint8_t      *block_list;                        /**< memory blocks list */     小内存块的列表

    rt_size_t        block_total_count;                 /**< numbers of memory block */ 内存块的个数
    rt_size_t        block_free_count;                  /**< numbers of free memory block */剩余内存块的个数

    rt_list_t        suspend_thread;                    /**< threads pended on this resource */ 挂起的线程列表
    rt_size_t        suspend_thread_count;       /**< numbers of thread pended on this resource */挂起的线程个数
};

// 内存池的初始化与脱离,创建与删除

rt_err_t rt_mp_init(struct rt_mempool *mp,  //内存池控制块地址
                    const char        *name,           // 名称
                    void              *start,             //  内存池的地址 需要先定义出来
                    rt_size_t          size,
                    rt_size_t          block_size);  // 4的整数倍  内存块个数   size/(block_size +4)
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);

 

 

 

 

你可能感兴趣的:(RTTHREAD内存池)