From ae7269e6fd423deb4c18a9cab1a5969a0438fa71 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sat, 15 Aug 2026 16:07:00 -0700 Subject: [PATCH] Comments, adding Region to Heap --- include/arena.h | 2 ++ include/heap.h | 9 ++++++++- include/region.h | 3 +++ src/heap.cpp | 9 +++++++-- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/arena.h b/include/arena.h index 9bba7a1..b8252c4 100644 --- a/include/arena.h +++ b/include/arena.h @@ -36,6 +36,8 @@ #include "region.h" namespace mimir { + +// Arena memory allocator, baed by a mimir::Region class Arena { public: diff --git a/include/heap.h b/include/heap.h index bd5e0ca..da19c1e 100644 --- a/include/heap.h +++ b/include/heap.h @@ -33,14 +33,18 @@ #include +#include "region.h" + namespace mimir { + +// Heap implementation based on Two-Level Segregated Fit (TLSF) memory allocation class Heap { public: Heap(); ~Heap(); - bool init(size_t minSize = 1ULL << 24, size_t maxSize = 1ULL << 32); + bool init(size_t maxSize = 1ULL << 32); // Allocate `size` bytes std::byte* alloc(size_t size); @@ -50,6 +54,9 @@ public: // Allocate `size` bytes, aligned to 64 bytes and padded to next 64-byte offset. std::byte* allocA64(size_t size); + +private: + Region m_region; }; } // namespace mimir diff --git a/include/region.h b/include/region.h index 8ea5df0..a75d06e 100644 --- a/include/region.h +++ b/include/region.h @@ -34,6 +34,9 @@ #include namespace mimir { + +// Dynamically growable memory region with a contiguous address range. +// Provides OS and hardware agnostic reservation and committing of memory pages. class Region { public: diff --git a/src/heap.cpp b/src/heap.cpp index d8b2550..c666ec3 100644 --- a/src/heap.cpp +++ b/src/heap.cpp @@ -38,6 +38,8 @@ namespace mimir { +// Two-Level Segregated Fit (TLSF): http://www.gii.upv.es/tlsf/files/papers/ecrts04_tlsf.pdf + Heap::Heap() { } @@ -46,9 +48,12 @@ Heap::~Heap() { } -bool Heap::init(size_t minSize, size_t maxSize) +bool Heap::init(size_t maxSize) { - return false; // not implemented + if (!m_region.init(maxSize)) { + return false; + } + return true; } // Allocate `size` bytes