aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-03-16 09:37:47 +0100
committerFelix Morgner <felix.morgner@ost.ch>2026-03-16 09:37:47 +0100
commitd9a653e66d3e7ce3a93219626b281d727e51e2a9 (patch)
treeaea1c1421821ffc629736377dfb1c06fb7518633
parentb67872907249bed3bad141fae97350959bffb009 (diff)
downloadteachos-d9a653e66d3e7ce3a93219626b281d727e51e2a9.tar.xz
teachos-d9a653e66d3e7ce3a93219626b281d727e51e2a9.zip
kernel/memory: clean up new/delete implementations
-rw-r--r--kernel/src/memory/operators.cpp65
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);
+}