diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 08:34:13 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 08:34:13 +0100 |
| commit | 64bf7fcf58ced023be1701ed4508e38f746d40b8 (patch) | |
| tree | 023637c060d169e5a72576f62c9bd616b8b5b937 /kernel/src/memory/operators.cpp | |
| parent | 1e23bfc850f0ca126bff3c56c86419ab1570c96e (diff) | |
| download | teachos-64bf7fcf58ced023be1701ed4508e38f746d40b8.tar.xz teachos-64bf7fcf58ced023be1701ed4508e38f746d40b8.zip | |
kernel/memory: implement basic free-list heap
Diffstat (limited to 'kernel/src/memory/operators.cpp')
| -rw-r--r-- | kernel/src/memory/operators.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
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 <cstddef> +#include <new> + +[[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 |
