mymalloc中的my_mem_malloc是否需要加临界保护

2019-07-20 10:15发布

[mw_shl_code=c,true] //内存分配(内部调用) //memx:所属内存块 //size:要分配的内存大小(字节) //返回值:0XFFFFFFFF,代表错误;其他,内存偏移地址 u32 my_mem_malloc(u8 memx,u32 size) { signed long offset=0; u32 nmemb; //需要的内存块数 u32 cmemb=0;//连续空内存块数 u32 i; if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//未初始化,先执行初始化 if(size==0)return 0XFFFFFFFF;//不需要分配 nmemb=size/memblksize[memx]; //获取需要分配的连续内存块数 if(size%memblksize[memx])nmemb++; //------------------加入进入临界区----------------------------- OS_CRITICAL_ENTER(); //进入临界区 //----------------------------------------------- for(offset=memtblsize[memx]-1;offset>=0;offset--)//搜索整个内存控制区 { if(!mallco_dev.memmap[memx][offset])cmemb++;//连续空内存块数增加 else cmemb=0; //连续内存块清零 if(cmemb==nmemb) //找到了连续nmemb个空内存块 { for(i=0;i<nmemb;i++) //标注内存块非空 { mallco_dev.memmap[memx][offset+i]=nmemb; } //-----------------加入退出临界区----------------------- OS_CRITICAL_EXIT(); //退出临界区 //----------------------------------------- return (offset*memblksize[memx]);//返回偏移地址 } } //---------------加入退出临界区------------------------- OS_CRITICAL_EXIT(); //退出临界区 //----------------------------------------- return 0XFFFFFFFF;//未找到符合分配条件的内存块 } [/mw_shl_code] 如果不加临界保护,多任务或者中断调用mymalloc()是否可能会出错?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
taizonglai
1楼-- · 2019-07-20 13:35
理论上要加的,但是在实际使用中没加过,还没出过问题
wyh
2楼-- · 2019-07-20 17:32
 精彩回答 2  元偷偷看……
故事与酒
3楼-- · 2019-07-20 21:20
 精彩回答 2  元偷偷看……

一周热门 更多>