aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
+}