大家好,请问在原子例程 内存管理实验中初始化函数为什么管理表要*2

2019-10-15 04:00发布

大家好,请问在原子例程 内存管理实验中初始化函数为什么管理表要*2

void my_mem_init(u8 memx)  
{  
    mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零  
        mymemset(mallco_dev.membase[memx], 0,memsize[memx]);        //内存池所有数据清零  
        mallco_dev.memrdy[memx]=1;                                                                //内存管理初始化OK  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
kingnike
1楼-- · 2019-10-15 05:42
因为memmap的成员是16位的,MEM1_ALLOC_TABLE_SIZE是成员的个数,乘以2才是字节数。
taizonglai
2楼-- · 2019-10-15 06:05
 精彩回答 2  元偷偷看……
loyalboy1111
3楼-- · 2019-10-15 11:48
zuozhongkai 发表于 2016-5-24 17:27
注意管理表的数据类型

内存池大小和内存管理表大小都是定义的U32的。为什么内存池初始化不需要*2

//内存管理参数          
const u32 memtblsize[SRAMBANK]={MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE,MEM3_ALLOC_TABLE_SIZE};        //内存表大小
const u32 memblksize[SRAMBANK]={MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE,MEM3_BLOCK_SIZE};


//内存管理初始化  
//memx:所属内存块
void my_mem_init(u8 memx)  
{  
    mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零  
        mymemset(mallco_dev.membase[memx], 0,memsize[memx]);        //内存池所有数据清零  
        mallco_dev.memrdy[memx]=1;                                                                //内存管理初始化OK  
}  
loyalboy1111
4楼-- · 2019-10-15 12:24
zuozhongkai 发表于 2016-5-24 17:27
注意管理表的数据类型

你好,可以帮忙指点下吗,谢谢
loyalboy1111
5楼-- · 2019-10-15 14:42
//内存管理控制器   函数指针
struct _m_mallco_dev
{
        void (*init)(u8);                                        //初始化
        u8 (*perused)(u8);                                      //内存使用率
        u8         *membase[SRAMBANK];                                //内存池 管理SRAMBANK个区域的内存
        u16 *memmap[SRAMBANK];                                 //内存管理状态表
        u8  memrdy[SRAMBANK];                                 //内存管理是否就绪
};

那内存池定义的是u8类型,在初始化的时候为什么不*4呢?
loyalboy1111
6楼-- · 2019-10-15 18:00
kingnike 发表于 2016-5-25 15:16
因为memmap的成员是16位的,MEM1_ALLOC_TABLE_SIZE是成员的个数,乘以2才是字节数。

//内存管理控制器   函数指针
struct _m_mallco_dev
{
        void (*init)(u8);                                        //初始化
        u8 (*perused)(u8);                                      //内存使用率
        u8         *membase[SRAMBANK];                                //内存池 管理SRAMBANK个区域的内存
        u16 *memmap[SRAMBANK];                                 //内存管理状态表
        u8  memrdy[SRAMBANK];                                 //内存管理是否就绪
};

那内存池定义的是u8类型,在初始化的时候为什么不*4呢?

一周热门 更多>