From: Brendan Hansen Date: Mon, 17 Jan 2022 04:00:55 +0000 (-0600) Subject: "better" heap freeing X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=8390de8984785a5560884dd25797f6cb4eb7aa43;p=onyx.git "better" heap freeing --- 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;