implement heap_free

This commit is contained in:
mykola2312 2022-05-24 21:07:47 +03:00
parent 758409b454
commit 67446040c8

18
heap.c
View file

@ -71,6 +71,17 @@ mblock_t* heap_alloc(mheap_t* heap, unsigned int _size)
return block; return block;
} }
void heap_free(mblock_t* block)
{
block->size &= ~MBLOCK_ALLOCATED;
mblock_t* prev = block->prev;
mblock_t* next = (mblock_t*)((uint8_t*)block + block->size);
if (!(prev->size & MBLOCK_ALLOCATED))
heap_join(block, prev);
if (!(next->size & MBLOCK_ALLOCATED))
heap_join(block, next);
}
static void heap_debug(mheap_t* heap) static void heap_debug(mheap_t* heap)
{ {
@ -84,7 +95,7 @@ static void heap_debug(mheap_t* heap)
} }
} }
static uint8_t internal_heap[4096] = {0}; static uint8_t internal_heap[4096];
int main() int main()
{ {
@ -93,6 +104,11 @@ int main()
printf("heap_alloc\t%p\n", heap_alloc(&heap, 8)); printf("heap_alloc\t%p\n", heap_alloc(&heap, 8));
printf("heap_alloc\t%p\n", heap_alloc(&heap, 8)); printf("heap_alloc\t%p\n", heap_alloc(&heap, 8));
mblock_t* m3 = heap_alloc(&heap, 12);
printf("heap_alloc\t%p\n", m3);
printf("heap_alloc\t%p\n", heap_alloc(&heap, 8));
heap_free(m3);
printf("heap_alloc\t%p\n", heap_alloc(&heap, 8));
heap_debug(&heap); heap_debug(&heap);
return 0; return 0;