aboutsummaryrefslogtreecommitdiff
path: root/libk/memory.h
diff options
context:
space:
mode:
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*);