linux 在指定区域分配内存 c语言,C语言自己做动态内存分配【不可用于win和linux】...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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';

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值