简单的mem pool实现
初始化,get,put
void VIDEO_MEMPOOL_InitEmpty(video_mempool_t *mempool)
{
mempool->pool = NULL;
mempool->cnt = 0;
}
添加
void VIDEO_MEMPOOL_Put(video_mempool_t *mempool, void *mem)
{
*(void **)mem = mempool->pool;
mempool->pool = mem;
mempool->cnt++;
}
获取
void *VIDEO_MEMPOOL_Get(video_mempool_t *mempool)
{
void *mem = mempool->pool;
if (NULL != mem)
{
mempool->cnt–;
mempool->pool = *(void **)mem;
}
return mem;
}
typedef struct
{
void volatile pool; /!< Pointer to the pool. /
volatile uint32_t cnt; /!< Count of memory blocks in the pool. */
} video_mempool_t;
问题 1. 既然是mempool,只有一个void*pool的指针和一个cnt,怎么保存多个内存地址形成mempool。
把下一个块内存地址放到,上一块内存地址的头部。这样搞。put。。
获取的时候;