diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 09:37:47 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 09:37:47 +0100 |
| commit | d9a653e66d3e7ce3a93219626b281d727e51e2a9 (patch) | |
| tree | aea1c1421821ffc629736377dfb1c06fb7518633 | |
| parent | b67872907249bed3bad141fae97350959bffb009 (diff) | |
| download | teachos-d9a653e66d3e7ce3a93219626b281d727e51e2a9.tar.xz teachos-d9a653e66d3e7ce3a93219626b281d727e51e2a9.zip | |
kernel/memory: clean up new/delete implementations
| -rw-r--r-- | kernel/src/memory/operators.cpp | 65 |
1 files changed, 49 insertions, 16 deletions
diff --git a/kernel/src/memory/operators.cpp b/kernel/src/memory/operators.cpp index 1422133..57e31e6 100644 --- a/kernel/src/memory/operators.cpp +++ b/kernel/src/memory/operators.cpp @@ -5,10 +5,15 @@ #include <cstddef> #include <new> -[[nodiscard]] auto operator new(std::size_t size) -> void * +[[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment, std::nothrow_t const &) noexcept -> void * { auto & allocator = kernel::memory::get_heap_allocator(); - auto pointer = allocator.allocate(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}); + return allocator.allocate(size, alignment); +} + +[[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment) -> void * +{ + auto pointer = operator new(size, alignment, std::nothrow); if (pointer == nullptr) { @@ -18,22 +23,35 @@ return pointer; } -[[nodiscard]] auto operator new[](std::size_t size) -> void * +[[nodiscard]] auto operator new(std::size_t size, std::nothrow_t const &) noexcept -> void * { - return ::operator new(size); + return operator new(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}, std::nothrow); } -[[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment) -> void * +[[nodiscard]] auto operator new(std::size_t size) -> void * { - auto & allocator = kernel::memory::get_heap_allocator(); - auto pointer = allocator.allocate(size, alignment); + return operator new(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}); +} - if (pointer == nullptr) - { - kapi::system::panic("[OS:Heap] Out of memory!"); - } +[[nodiscard]] auto operator new[](std::size_t size, std::align_val_t alignment, std::nothrow_t const &) noexcept + -> void * +{ + return operator new(size, alignment, std::nothrow); +} - return pointer; +[[nodiscard]] auto operator new[](std::size_t size, std::align_val_t alignment) -> void * +{ + return operator new(size, alignment); +} + +[[nodiscard]] auto operator new[](std::size_t size, std::nothrow_t const &) noexcept -> void * +{ + return ::operator new(size); +} + +[[nodiscard]] auto operator new[](std::size_t size) -> void * +{ + return ::operator new(size); } auto operator delete(void * pointer) noexcept -> void @@ -45,7 +63,17 @@ auto operator delete(void * pointer) noexcept -> void } } -auto operator delete(void * pointer, [[maybe_unused]] std::size_t size) noexcept -> void +auto operator delete(void * pointer, std::size_t) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete(void * pointer, std::align_val_t) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete(void * pointer, std::size_t, std::align_val_t) noexcept -> void { ::operator delete(pointer); } @@ -55,12 +83,17 @@ auto operator delete[](void * pointer) noexcept -> void ::operator delete(pointer); } -auto operator delete[](void * pointer, [[maybe_unused]] std::size_t size) noexcept -> void +auto operator delete[](void * pointer, std::size_t) noexcept -> void { ::operator delete(pointer); } -auto operator delete(void * pointer, [[maybe_unused]] std::align_val_t alignment) noexcept -> void +auto operator delete[](void * pointer, std::align_val_t) noexcept -> void { ::operator delete(pointer); -}
\ No newline at end of file +} + +auto operator delete[](void * pointer, std::size_t, std::align_val_t) noexcept -> void +{ + ::operator delete(pointer); +} |
