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;
}
}
}
+ {
+ 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;