释放内存块所在块的确定

2019-07-21 02:09发布


我觉得代码中阴影部分中应该是 int index=offset/memblksize[memx]+1;
举个例子
         在外部flash中     __align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));
         外部flash的首地址为0x68000000,每个块的大小为32字节,块1的地址范围为:0x68000000-0x68000020-1,
                                                                                                       块2的地址范围为:0x68000020-0x68000040-1,
                                                                                                       
块3的地址范围为:0x68000040-0x68000060-1,  
                                                                                                       块4的地址范围为:0x68000060-0x68000080-1,
                                                                                                       ..........................................................................
       任取一个地址0x68000050,偏移量为0x50=80, 这个地址应该落在块3中,根据程序中的运算 int index=offset/memblksize[memx]=80/32=2,按照计算的结果该地址落在块2中。在这种情况下int  nmemb=mallco_dev.memmap[memx][index];  //内存块数量,获得的内存块的数量并不是要释放的内存块的数量,而是紧邻释放内存块的低地址内存块的数量。按照例程执行下来,是释放内存块的前面一个内存块开始,紧邻释放内存块的低地址内存块的数量。这样,不需要释放的内存块释放了一个;假设需要释放的内存块的个数为n,相邻低地址的内存块为m,如果n+1=m,需要释放的内存块被全部释放,如果n+1<m,需要释放的内存块紧邻高低址内存也被释放一部分;如果n+1>m,需要释放的内存块部分被释放。
       我觉得应该是  int index=offset/memblksize[memx]+1; 
   

     纯属个人意见,对与不对,还各位大神多多指正!




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-07-21 21:27
这里是没有问题的。楼主可以自己测试。
正点原子
2楼-- · 2019-07-21 22:54
数据都是从0开始的

一周热门 更多>