From 64bf7fcf58ced023be1701ed4508e38f746d40b8 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 16 Mar 2026 08:34:13 +0100 Subject: kernel/memory: implement basic free-list heap --- kernel/src/memory/operators.cpp | 66 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 kernel/src/memory/operators.cpp (limited to 'kernel/src/memory/operators.cpp') diff --git a/kernel/src/memory/operators.cpp b/kernel/src/memory/operators.cpp new file mode 100644 index 0000000..1422133 --- /dev/null +++ b/kernel/src/memory/operators.cpp @@ -0,0 +1,66 @@ +#include "kapi/system.hpp" + +#include "kernel/memory.hpp" + +#include +#include + +[[nodiscard]] auto operator new(std::size_t size) -> void * +{ + auto & allocator = kernel::memory::get_heap_allocator(); + auto pointer = allocator.allocate(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}); + + if (pointer == nullptr) + { + kapi::system::panic("[OS:Heap] Out of memory!"); + } + + return pointer; +} + +[[nodiscard]] auto operator new[](std::size_t size) -> void * +{ + return ::operator new(size); +} + +[[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment) -> void * +{ + auto & allocator = kernel::memory::get_heap_allocator(); + auto pointer = allocator.allocate(size, alignment); + + if (pointer == nullptr) + { + kapi::system::panic("[OS:Heap] Out of memory!"); + } + + return pointer; +} + +auto operator delete(void * pointer) noexcept -> void +{ + if (pointer != nullptr) + { + auto & allocator = kernel::memory::get_heap_allocator(); + allocator.deallocate(pointer); + } +} + +auto operator delete(void * pointer, [[maybe_unused]] std::size_t size) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete[](void * pointer) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete[](void * pointer, [[maybe_unused]] std::size_t size) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete(void * pointer, [[maybe_unused]] std::align_val_t alignment) noexcept -> void +{ + ::operator delete(pointer); +} \ No newline at end of file -- cgit v1.2.3