From 7715a5898be4aa14f1c25db6aa695bf538cdb158 Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Fri, 24 Nov 2023 09:01:25 -0800 Subject: [PATCH] [Mammoth] Naively free buddy allocated blocks. We don't yet attempt to merge them with nearby blocks. Currently this reduces the number of 2 page blocks we allocate down from 40 to 29. --- lib/mammoth/util/new.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/mammoth/util/new.cpp b/lib/mammoth/util/new.cpp index 008633c..340d8b9 100644 --- a/lib/mammoth/util/new.cpp +++ b/lib/mammoth/util/new.cpp @@ -90,11 +90,20 @@ class BuddyAllocator { return ptr; } + void Free(void* ptr) { + BuddySlot* slot = ((BuddySlot*)ptr) - 1; + // TODO: Merge. + free_front_->prev = slot; + slot->next = free_front_; + free_front_ = slot; + } + private: BuddySlot* free_front_ = nullptr; z_cap_t mutex_cap_ = 0; void AddPage() { + dbgln("PAGE"); uint64_t vaddr = PageAllocator::AllocatePagePair(); BuddySlot* slot = reinterpret_cast(vaddr); slot->prev = nullptr; @@ -157,11 +166,13 @@ void* Allocate(uint64_t size) { return ptr; } +void Free(void* ptr) { gAllocator.Free(ptr); } + } // namespace [[nodiscard]] void* operator new(uint64_t size) { return Allocate(size); } [[nodiscard]] void* operator new[](uint64_t size) { return Allocate(size); } -void operator delete(void*, uint64_t) {} -void operator delete[](void*) {} -void operator delete[](void*, uint64_t) {} +void operator delete(void* ptr, uint64_t) { Free(ptr); } +void operator delete[](void* ptr) { Free(ptr); } +void operator delete[](void* ptr, uint64_t) { Free(ptr); }