aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src/memory')
-rw-r--r--arch/x86_64/src/memory/heap/global_heap_allocator.cpp40
1 files changed, 34 insertions, 6 deletions
diff --git a/arch/x86_64/src/memory/heap/global_heap_allocator.cpp b/arch/x86_64/src/memory/heap/global_heap_allocator.cpp
index 6c31de0..11848ed 100644
--- a/arch/x86_64/src/memory/heap/global_heap_allocator.cpp
+++ b/arch/x86_64/src/memory/heap/global_heap_allocator.cpp
@@ -5,14 +5,42 @@
namespace teachos::arch::memory::heap
{
- auto global_heap_allocator::allocate(std::size_t size) -> void *
- {
- static linked_list_allocator allocator{HEAP_START, HEAP_START + HEAP_SIZE};
- return allocator.allocate(size);
- }
+ static global_heap_allocator::allocator = linked_list_allocator{HEAP_START, HEAP_START + HEAP_SIZE};
+
+ auto global_heap_allocator::allocate(std::size_t size) -> void * { return allocator.allocate(size); }
auto global_heap_allocator::deallocate(void * pointer, std::size_t size) -> void
{
- // allocator.deallocate(pointer, size);
+ allocator.deallocate(pointer, size);
}
} // namespace teachos::arch::memory::heap
+
+auto operator new(std::size_t size) -> void *
+{
+ return teachos::arch::memory::heap::global_heap_allocator::allocate(size);
+}
+
+auto operator delete(void * pointer) noexcept -> void
+{
+ teachos::arch::memory::heap::global_heap_allocator::deallocate(pointer, 64);
+}
+
+auto operator delete(void * pointer, std::size_t size) noexcept -> void
+{
+ teachos::arch::memory::heap::global_heap_allocator::deallocate(pointer, size);
+}
+
+auto operator new[](std::size_t size) -> void *
+{
+ return teachos::arch::memory::heap::global_heap_allocator::allocate(size);
+}
+
+auto operator delete[](void * pointer) noexcept -> void
+{
+ teachos::arch::memory::heap::global_heap_allocator::deallocate(pointer, 64);
+}
+
+auto operator delete[](void * pointer, std::size_t size) noexcept -> void
+{
+ teachos::arch::memory::heap::global_heap_allocator::deallocate(pointer, size);
+}