#pragma once #include 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*);