-
Notifications
You must be signed in to change notification settings - Fork 105
Open
Labels
wontfixThis will not be worked onThis will not be worked on
Description
static int merge_free_chunk(MemoryPool* mp, _MP_Memory* mm, _MP_Chunk* c) {
_MP_Chunk *p0 = c, *p1 = c;
while (p0->is_free) {
p1 = p0;
// bug:向前面搜索邻接内存块貌似有错?p0是作为内存块_MP_Chunk首地址,而不是分配给用户的内存空间的首地址,因此不应该减去MP_CHUNKHEADER
// ++if ((char*) p0 - MP_CHUNKHEADER <= mm->start) break;
// --if ((char*) p0 - MP_CHUNKEND - MP_CHUNKHEADER <= mm->start) break;
p0 = *(_MP_Chunk**) ((char*) p0 - MP_CHUNKEND);
}
p0 = (_MP_Chunk*) ((char*) p1 + p1->alloc_mem);
while ((char*) p0 < mm->start + mp->mempool_size && p0->is_free) {
MP_DLINKLIST_DEL(mm->free_list, p0);
p1->alloc_mem += p0->alloc_mem;
p0 = (_MP_Chunk*) ((char*) p0 + p0->alloc_mem);
}
*(_MP_Chunk**) ((char*) p1 + p1->alloc_mem - MP_CHUNKEND) = p1;
#ifdef _Z_MEMORYPOOL_THREAD_
MP_UNLOCK(mp);
#endif
return 0;
}
Metadata
Metadata
Assignees
Labels
wontfixThis will not be worked onThis will not be worked on