[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.
This commit is contained in:
parent
0915cf45dc
commit
7715a5898b
|
@ -90,11 +90,20 @@ class BuddyAllocator {
|
||||||
return ptr;
|
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:
|
private:
|
||||||
BuddySlot* free_front_ = nullptr;
|
BuddySlot* free_front_ = nullptr;
|
||||||
z_cap_t mutex_cap_ = 0;
|
z_cap_t mutex_cap_ = 0;
|
||||||
|
|
||||||
void AddPage() {
|
void AddPage() {
|
||||||
|
dbgln("PAGE");
|
||||||
uint64_t vaddr = PageAllocator::AllocatePagePair();
|
uint64_t vaddr = PageAllocator::AllocatePagePair();
|
||||||
BuddySlot* slot = reinterpret_cast<BuddySlot*>(vaddr);
|
BuddySlot* slot = reinterpret_cast<BuddySlot*>(vaddr);
|
||||||
slot->prev = nullptr;
|
slot->prev = nullptr;
|
||||||
|
@ -157,11 +166,13 @@ void* Allocate(uint64_t size) {
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Free(void* ptr) { gAllocator.Free(ptr); }
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
[[nodiscard]] void* operator new(uint64_t size) { return Allocate(size); }
|
[[nodiscard]] void* operator new(uint64_t size) { return Allocate(size); }
|
||||||
[[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* ptr, uint64_t) { Free(ptr); }
|
||||||
void operator delete[](void*) {}
|
void operator delete[](void* ptr) { Free(ptr); }
|
||||||
void operator delete[](void*, uint64_t) {}
|
void operator delete[](void* ptr, uint64_t) { Free(ptr); }
|
||||||
|
|
Loading…
Reference in New Issue