From d02e3b19c7767edb2b3199a1e6f52af24ae69b5c Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 10 Jan 2023 21:59:40 +0200 Subject: [PATCH] BAN: Move operator new/delete to BAN/Memory.cpp We also now implement alignment new --- BAN/BAN/Memory.cpp | 13 +++++++++++++ BAN/Makefile | 1 + BAN/include/BAN/Memory.h | 9 +-------- 3 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 BAN/BAN/Memory.cpp diff --git a/BAN/BAN/Memory.cpp b/BAN/BAN/Memory.cpp new file mode 100644 index 00000000..e69559cd --- /dev/null +++ b/BAN/BAN/Memory.cpp @@ -0,0 +1,13 @@ +#include + +namespace std { enum class align_val_t : size_t {}; } + +void* operator new(size_t size) { return BAN::allocator(size); } +void* operator new[](size_t size) { return BAN::allocator(size); } +void* operator new(size_t size, std::align_val_t al) { return BAN::allocator_align(size, (size_t)al); } +void* operator new[](size_t size, std::align_val_t al) { return BAN::allocator_align(size, (size_t)al); } + +void operator delete(void* addr) { BAN::deallocator(addr); } +void operator delete[](void* addr) { BAN::deallocator(addr); } +void operator delete(void* addr, size_t) { BAN::deallocator(addr); } +void operator delete[](void* addr, size_t) { BAN::deallocator(addr); } \ No newline at end of file diff --git a/BAN/Makefile b/BAN/Makefile index 81c7d54e..862bf72e 100644 --- a/BAN/Makefile +++ b/BAN/Makefile @@ -33,6 +33,7 @@ FREEOBJS= \ $(ARCH_FREEOBJS) \ BAN/String.o \ BAN/StringView.o \ +BAN/Memory.o \ HOSTEDOBJS=\ $(ARCH_HOSTEDOBJS) \ diff --git a/BAN/include/BAN/Memory.h b/BAN/include/BAN/Memory.h index 01c44181..c3dbc3f1 100644 --- a/BAN/include/BAN/Memory.h +++ b/BAN/include/BAN/Memory.h @@ -10,6 +10,7 @@ namespace BAN { #if defined(__is_kernel) static constexpr void*(&allocator)(size_t) = kmalloc; + static constexpr void*(&allocator_align)(size_t, size_t) = kmalloc; static constexpr void(&deallocator)(void*) = kfree; #else static constexpr void*(&allocator)(size_t) = malloc; @@ -36,11 +37,3 @@ namespace BAN }; } - -inline void* operator new(size_t size) { return BAN::allocator(size); } -inline void* operator new[](size_t size) { return BAN::allocator(size); } - -inline void operator delete(void* addr) { BAN::deallocator(addr); } -inline void operator delete[](void* addr) { BAN::deallocator(addr); } -inline void operator delete(void* addr, size_t) { BAN::deallocator(addr); } -inline void operator delete[](void* addr, size_t) { BAN::deallocator(addr); } \ No newline at end of file