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()是否可能会出错?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。