allocator.hpp 843 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #pragma once
  2. #include <cstddef>
  3. #include <types/types.h>
  4. #include <kernel/async/lock.hpp>
  5. namespace types::memory {
  6. class brk_memory_allocator {
  7. public:
  8. using byte = std::byte;
  9. using size_type = std::size_t;
  10. private:
  11. byte* p_start;
  12. byte* p_limit;
  13. byte* p_break;
  14. byte* p_allocated;
  15. kernel::async::mutex mtx;
  16. byte* brk(byte* addr);
  17. byte* sbrk(size_type increment);
  18. constexpr byte* sbrk() const noexcept { return p_break; }
  19. public:
  20. explicit brk_memory_allocator(byte* start, size_type size);
  21. brk_memory_allocator(const brk_memory_allocator&) = delete;
  22. void* allocate(size_type size);
  23. void deallocate(void* ptr);
  24. bool allocated(void* ptr) const noexcept;
  25. };
  26. } // namespace types::memory
  27. namespace kernel::kinit {
  28. void init_allocator();
  29. } // namespace kernel::kinit