diff --git a/Kernel/Heap/kmalloc.cpp b/Kernel/Heap/kmalloc.cpp index 1959759e8e..ee9e7411eb 100644 --- a/Kernel/Heap/kmalloc.cpp +++ b/Kernel/Heap/kmalloc.cpp @@ -264,16 +264,36 @@ void* krealloc(void* ptr, size_t new_size) return g_kmalloc_global->m_heap.reallocate(ptr, new_size); } -void* operator new(size_t size) +void* operator new(size_t size) noexcept { return kmalloc(size); } -void* operator new[](size_t size) +void* operator new[](size_t size) noexcept { return kmalloc(size); } +void operator delete(void* ptr) noexcept +{ + return kfree(ptr); +} + +void operator delete(void* ptr, size_t) noexcept +{ + return kfree(ptr); +} + +void operator delete[](void* ptr) noexcept +{ + return kfree(ptr); +} + +void operator delete[](void* ptr, size_t) noexcept +{ + return kfree(ptr); +} + void get_kmalloc_stats(kmalloc_stats& stats) { ScopedSpinLock lock(s_lock); diff --git a/Kernel/Heap/kmalloc.h b/Kernel/Heap/kmalloc.h index ca40e98d0c..55689935ea 100644 --- a/Kernel/Heap/kmalloc.h +++ b/Kernel/Heap/kmalloc.h @@ -40,6 +40,13 @@ extern bool g_dump_kmalloc_stacks; inline void* operator new(size_t, void* p) { return p; } inline void* operator new[](size_t, void* p) { return p; } +[[nodiscard]] void* operator new(size_t size) noexcept; +void operator delete(void* ptr) noexcept; +void operator delete(void* ptr, size_t) noexcept; +[[nodiscard]] void* operator new[](size_t size) noexcept; +void operator delete[](void* ptrs) noexcept; +void operator delete[](void* ptr, size_t) noexcept; + [[gnu::malloc, gnu::returns_nonnull, gnu::alloc_size(1)]] void* kmalloc(size_t); template