implement heap_realloc

This commit is contained in:
mykola2312 2022-05-18 06:32:22 +03:00
parent 3f01b5abfd
commit ebef59e3da
3 changed files with 17 additions and 0 deletions

14
heap.c
View file

@ -1,4 +1,5 @@
#include "heap.h" #include "heap.h"
#include "cutil.h"
static mblock_t* mblock_get_next(mblock_t* block) static mblock_t* mblock_get_next(mblock_t* block)
{ {
@ -111,6 +112,19 @@ void* heap_alloc(mheap_t* heap, size_t size)
return block->data; return block->data;
} }
void* heap_realloc(mheap_t* heap, void* mem, size_t size)
{
mblock_t* block = (mblock_t*)((u8*)mem - MBLOCK_SIZE);
(void)heap;
heap_free(heap, mem);
void* newMem = heap_alloc(heap, size);
if (mem != newMem)
cu_memcpy(newMem, mem, mblock_get_size(block));
return newMem;
}
void heap_free(mheap_t* heap, void* mem) void heap_free(mheap_t* heap, void* mem)
{ {
mblock_t* block = (mblock_t*)((u8*)mem - MBLOCK_SIZE); mblock_t* block = (mblock_t*)((u8*)mem - MBLOCK_SIZE);

1
heap.h
View file

@ -29,6 +29,7 @@ void heap_init(mheap_t* heap, void* data, uword size);
void heap_join(mblock_t* start, int dir); void heap_join(mblock_t* start, int dir);
void heap_split(mblock_t* block, size_t req_size); void heap_split(mblock_t* block, size_t req_size);
void* heap_alloc(mheap_t* heap, size_t size); void* heap_alloc(mheap_t* heap, size_t size);
void* heap_realloc(mheap_t* heap, void* mem, size_t size);
void heap_free(mheap_t* heap, void* mem); void heap_free(mheap_t* heap, void* mem);
#endif #endif

2
test.c
View file

@ -200,6 +200,8 @@ int main()
printf("heap_alloc\t%p\n", m2); printf("heap_alloc\t%p\n", m2);
printf("heap_alloc\t%p\n", m3); printf("heap_alloc\t%p\n", m3);
printf("heap_alloc\t%p\n", m4); printf("heap_alloc\t%p\n", m4);
void* m5 = heap_realloc(&heap, m4, 10);
printf("heap_realloc\t%p\t%p\n", m4, m5);
cutil_exit(); cutil_exit();
return 0; return 0;