所以我无法为我的生活做的事情是将这个新节点按其startbyte
和endbytes
按顺序放入链接列表中。然后我需要它来查看节点是否紧挨着彼此,如果它们是。将它们变成一个大节点。
以下是我的一些代码,用于从第一个列表中释放内存,但在创建新节点后,我无法找到一种有效的方法,我尝试了多种不同的东西。
void release_memory(const int job)
{
ALLOCPTR t = alloclist;
FREEPTR f = freelist;
ALLOCPTR prev = alloclist;
while(t!=NULL)
{
if(t->id == job )
{
if(t==alloclist)
{
alloclist=alloclist->next;
}
else
{
prev->next = t->next;
}
FREEPTR newfreenode = new FREE_NODE;
newfreenode->start_byte = t->start_byte;
newfreenode->end_byte = t->end_byte;
newfreenode->size = t->size;
while(f->next!=NULL)
{
f=f->next;//
}
f->next = newfreenode;
checkIfFreeTogether();
}
prev=t;
t=t->next;
}
我需要做的一个例子就是这个
before any memory freeing
JOB MEMORY
1 1-49
2 50-99
3 100-199
After freeing 2 and 3
job memory
1 1-49
FREE 50-99
FREE 100-199
After creating one big free node out of the two
job memory
1 1-49
FREE 50-199
答案 0 :(得分:0)
不是仅将新节点放在freelist
的末尾,而是检查先前的节点end_byte
与新节点start_byte
以及新节点{{1与下一个节点end_byte
进行比较。这样,列表保持排序,并且很容易组合连续内存区域的节点。