该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
int first=1;//是否第一次分配
struct mcb start;//首节点
struct mcb *brk=&start;
struct mcb *freelist;
void * malloc(int _size)
{
mcb * p;//指针
if(first)//第一次分配
{
p=(&start)+sizeof(start);
start.next=p;
p->size=_size;
first=0;
p->na=1;
p->firstsize=_size;
return p+sizeof(brk);
}
brk=&start;
do//遍历
{
if((brk->firstsize<_size>na!=0)
{
if(brk->next)
{
brk=(mcb*)brk->next;
}
else
break;
}
else
{
brk->na=1;
brk->size=_size;
return brk+sizeof(mcb);
}
}while((mcb*)brk->next);
p=brk+sizeof(mcb)+freelist->firstsize;//开个新节点,重新执行函数
brk->next=p;
p->size=_size;
freelist=p;
p->firstsize=_size;
p->na=0;
p->next=0;
return malloc(_size);
}
void free(void *address)
{
mcb * operator=address-sizeof(mcb);
operator=operator-sizeof(mcb);
operator->size=0;
operator->na=0;
}
void printMCBMsg(void *address)
{
mcb * operator=(mcb*)address-sizeof(mcb);
printf("Size=%d\nStatue=%s\n",operator->size,(operator->na)?("Not available!"):("Available!"));
}
void memcpy(char *_dest,char *_src,int len)
{
int i=0;
for(i=0;i
{
_dest[i]=_src[i];
}
}
void memmove(char *_dest,char *_src,int len)
{
int i=0;
for(i=0;i
{
_dest[i]=_src[i];
_src[i]='\0';
}
}