From 8390de8984785a5560884dd25797f6cb4eb7aa43 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 16 Jan 2022 22:00:55 -0600 Subject: [PATCH] "better" heap freeing --- core/alloc/heap.onyx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/core/alloc/heap.onyx b/core/alloc/heap.onyx index 959b5d8a..e20a5712 100644 --- a/core/alloc/heap.onyx +++ b/core/alloc/heap.onyx @@ -65,11 +65,11 @@ get_freed_size :: () => { heap_block :: struct { size : u32; - magic_number : u32; } heap_freed_block :: struct { use base: heap_block; + magic_number : u32; next : ^heap_freed_block; prev : ^heap_freed_block; } @@ -200,6 +200,21 @@ get_freed_size :: () => { } } + { + walker := heap_state.free_list; + while walker != null { + after_block := cast(^heap_freed_block) (cast(uintptr) walker + walker.size); + if after_block == hb_ptr { + hb_ptr.next = null; + hb_ptr.prev = null; + + walker.size += hb_ptr.size; + return; + } + walker = walker.next; + } + } + hb_ptr.magic_number = Free_Block_Magic_Number; hb_ptr.prev = null; hb_ptr.next = heap_state.free_list; -- 2.25.1