aboutsummaryrefslogtreecommitdiff
path: root/libk/memory.h
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2021-03-28 12:41:57 +0300
committerAqua-sama <aqua@iserlohn-fortress.net>2021-03-28 12:41:57 +0300
commitb3b1385e7af85ba2cb1f92bc31706099f1b9d562 (patch)
tree2086f7333e33970f17898049d7392e7dece705ff /libk/memory.h
parentclang-tidy fixes (diff)
downloadkernel.cpp-b3b1385e7af85ba2cb1f92bc31706099f1b9d562.tar.xz
Move MemoryAllocator to libk
Diffstat (limited to 'libk/memory.h')
-rw-r--r--libk/memory.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/libk/memory.h b/libk/memory.h
new file mode 100644
index 0000000..a01252c
--- /dev/null
+++ b/libk/memory.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <types.h>
+
+class MemoryAllocator {
+public:
+ MemoryAllocator(uint32_t start, size_t size);
+
+ void* allocate(size_t size);
+ void deallocate(void* ptr);
+
+ size_t free_space() const;
+ size_t used_space() const;
+
+private:
+ struct MemoryChunk {
+ MemoryChunk* prev = nullptr;
+ MemoryChunk* next = nullptr;
+ bool allocated = false;
+ size_t size = 0;
+ };
+ MemoryChunk* begin;
+};
+
+namespace std {
+struct nothrow_t {
+ explicit nothrow_t() = default;
+};
+}; // namespace std
+
+void* operator new(unsigned, const std::nothrow_t&) noexcept;
+void* operator new[](unsigned, const std::nothrow_t&) noexcept;
+
+void operator delete(void* ptr);
+void operator delete[](void* ptr);
+
+// placement new
+void* operator new(unsigned, void*);
+void* operator new[](unsigned, void*);