内存管理的疑问?内存管理表初始化的时候,为什么要乘以2???

2019-07-21 06:00发布

//内存管理表
u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部SRAM内存池MAP
u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE))); //外部SRAM内存池MAP
//内存管理参数   
const u32 memtblsize[2]={MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE}; //内存表大小 0---1279,0---6143
const u32 memblksize[2]={MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE}; //内存分块大小
const u32 memsize[2]={MEM1_MAX_SIZE,MEM2_MAX_SIZE}; //内存总大小

//设置内存
//*s:内存首地址
//c :要设置的值
//count:需要设置的内存大小(字节为单位)
void mymemset(void *s,u8 c,u32 count)  
{  
    u8 *xs = s;     //这里是隐式转换,把void*转换为u8*
    while(count--)*xs++=c;  
}   
//内存管理初始化  
//memx:所属内存块
void 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  
}
那个memtblsize数组不是32位的吗???还要乘以2,那内存管理表的编号岂不是扩大2倍了???

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
41条回答
初级选手
1楼-- · 2019-07-25 15:18
 精彩回答 2  元偷偷看……
小蜜蜂
2楼-- · 2019-07-25 16:39
将内存池分为n个内存块对应内存管理表也分为n份  就是一个内存块对应管理表的一份
而内存管理表的一份需两个字节u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE];
例如你要初始化10个内存块,你要将对应的内存表中连续的十个字节设置为0
babyounima
3楼-- · 2019-07-25 22:20
学习了
铃兰之巅
4楼-- · 2019-07-25 22:34
初级选手 发表于 2016-1-26 11:37
其实很多人不明白,觉得*2好像对应的地址数量变成了两倍,一定要清楚,最后的count只是提示要执行多 ...

这位兄台,回答简单明了!一语中的。。。。
学习STM32F103
5楼-- · 2019-07-25 22:54
学习了,看内存代码没头绪,这样一看可以理解

一周热门 更多>