#define MAX_ALLOC_NUM 32 //最多可申请的内存块数。
#define MEM_PAGE_SZ 32 //一页内存的字节数。(分配的最小单位为page)#define MEM_BLK_NUM 2 //可供分配的块数量。(一个块2048byte字节)
//内存池的块
typedef struct mem_block
{
unsigned char mem[64][MEM_PAGE_SZ]; //内存池:64个页
u64 mask; //内存池页占用的掩码
}mem_block_t;
//内存池的管理块
typedef struct mem_patch
{
u8 m_blk_id; //使用的内存池的块的ID
u8 m_sta_idx; //当前内存片在内存池中的起始位置(及在mem数组中的下标)
u16 m_sz; //所申请的内存大小(单位字节)
u8 used; //标识:标识当前管理块是否已被使用
}mem_patch_t;
mem_block_t mem_pool[MEM_BLK_NUM]; //所申请的内存池块
mem_patch_t mem_pacth[MAX_ALLOC_NUM]; //管理内存的管理块
//获取一个空闲的内存管理项ID
static char mem_get_free_patch()
{
u8 i=0;
for(i=0;i<MAX_ALLOC_NUM;i++)
{
if(mem_pacth[i].used == 0)
{
return i;
}
}
return -1;
}
//通过给定的地址,查找一个内存管理项ID
static char