aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/kernel/main.cpp28
-rw-r--r--arch/x86_64/src/memory/heap/global_heap_allocator.cpp40
2 files changed, 38 insertions, 30 deletions
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index f88ea41..ed9fc58 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -22,12 +22,8 @@ namespace teachos::arch::kernel
auto heap_test() -> void
{
- /*memory::heap::linked_list_allocator heap_allocator{memory::heap::HEAP_START,
- memory::heap::HEAP_START + memory::heap::HEAP_SIZE};
- auto test = heap_allocator.allocate(1024);
- auto test2 = new (test) memory::multiboot::memory_information{};
- auto test3 = new (static_cast<void *>(static_cast<memory::multiboot::memory_information *>(test) + 1))
- memory::multiboot::memory_information{};
+ auto test2 = new memory::multiboot::memory_information{};
+ auto test3 = new memory::multiboot::memory_information{};
auto test4 = *test2;
auto test5 = *test3;
test4.kernel_end = 5000;
@@ -42,24 +38,8 @@ namespace teachos::arch::kernel
test2->kernel_end = 2000;
test2->kernel_start = 1000;
test2->multiboot_start = 2000;
- heap_allocator.deallocate(test, 1024);
-
- auto test9 = heap_allocator.allocate(1024);
- auto test10 = heap_allocator.allocate(1024);
- auto test11 = heap_allocator.allocate(1024);
- heap_allocator.deallocate(test9, 1024);
- auto test12 = heap_allocator.allocate(1024);
- auto test13 = heap_allocator.allocate(1024);
- heap_allocator.deallocate(test11, 1024);
- heap_allocator.deallocate(test10, 1024);
- heap_allocator.deallocate(test13, 1024);
- heap_allocator.deallocate(test12, 1024);*/
-
- int * test = new int();
-
- if (test == nullptr)
- {
- }
+ delete test2;
+ delete test3;
}
auto main() -> void
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);
+}