aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp2
-rw-r--r--arch/x86_64/src/memory/heap/global_heap_allocator.cpp12
2 files changed, 9 insertions, 5 deletions
diff --git a/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp b/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp
index 871f4f8..f391936 100644
--- a/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/heap/global_heap_allocator.hpp
@@ -12,7 +12,7 @@ namespace teachos::arch::memory::heap
static auto deallocate(void * pointer, std::size_t size) -> void;
private:
- static linked_list_allocator allocator;
+ static auto get_underlying_allocator() -> linked_list_allocator &;
};
} // namespace teachos::arch::memory::heap
diff --git a/arch/x86_64/src/memory/heap/global_heap_allocator.cpp b/arch/x86_64/src/memory/heap/global_heap_allocator.cpp
index 11848ed..4e3a274 100644
--- a/arch/x86_64/src/memory/heap/global_heap_allocator.cpp
+++ b/arch/x86_64/src/memory/heap/global_heap_allocator.cpp
@@ -5,13 +5,17 @@
namespace teachos::arch::memory::heap
{
- static global_heap_allocator::allocator = linked_list_allocator{HEAP_START, HEAP_START + HEAP_SIZE};
-
- auto global_heap_allocator::allocate(std::size_t size) -> void * { return allocator.allocate(size); }
+ auto global_heap_allocator::allocate(std::size_t size) -> void * { return get_underlying_allocator().allocate(size); }
auto global_heap_allocator::deallocate(void * pointer, std::size_t size) -> void
{
- allocator.deallocate(pointer, size);
+ get_underlying_allocator().deallocate(pointer, size);
+ }
+
+ auto global_heap_allocator::get_underlying_allocator() -> linked_list_allocator &
+ {
+ static linked_list_allocator allocator{HEAP_START, HEAP_START + HEAP_SIZE};
+ return allocator;
}
} // namespace teachos::arch::memory::heap