您的位置:首页 > 运维架构 > Linux

简单的malloc,free实现函数

2014-09-13 17:54 393 查看

简单的malloc,free实现函数

struct mem_control_block
{
int is_avaliable;
int size;
};

int has_initialized = 0;
void *managed_mem_start;
void *last_valid_address;

void mem_init()
{
last_valid_address = sbrk(0);
managed_mem_start = last_valid_address;
has_initalized = 1;
}

void free(*firstbyte)
{
struct mem_control_block *mcb;

mcb = firstbyte - sizeof(struct mem_control_block);
mcb->is_avaliable = 1;

return;
}

void malloc(int numbyte)
{
struct mem_control_block *current_mcb;
void *mem_location,current_location;

if(!has_initialized)
mem_init();

numbyte += sizeof(struct mem_control_block);
mem_location = 0;
current_location = managed_mem_start;

while(current_location != last_valid_address)
{
current_mcb = (struct mem_control_block *)current_location;
if(current_mcb->is_avaliable)
if(current_mcb->size >= numbyte)
{
current_mcb->is_avaliable = 0;
mem_location = current_location;
break;
}
//current_location += sizeof(struct mem_control_block);
current_location += current_mcb->size;
}

if(!memlocation)
{
sbrk(numbyte);
mem_location = last_valid_address;
last_valid_address += numbyte;

current_mcb = mem_location;
current_mcb->is_avaliable = 0;
current_mcb->size = numbyte;
}

mem_location += sizeof(struct mem_control_block);
return mem_location;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux编程