Advertisement
sve_vash

Untitled

Nov 22nd, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #include <vector>
  2. template<typename Tp>
  3. class FixedAllocator {
  4. PageAllocator page_allocator_;
  5. std::vector<Tp*> freemem_;
  6. const std::uint64_t pages;
  7.  
  8. public:
  9. explicit FixedAllocator(std::uint64_t page_size) :
  10. page_allocator_(page_size * sizeof(Tp)),
  11. freemem_(), pages(page_size) {
  12. Tp* p = reinterpret_cast<Tp*>(page_allocator_.Allocate());
  13. freemem_.push_back(p);
  14. for (std::uint64_t i = 0; i < page_size - 1; i++) {
  15. p++;
  16. freemem_.push_back(p);
  17. }
  18. }
  19.  
  20. Tp* Allocate() {
  21. Tp* p;
  22. if (freemem_.empty()) {
  23. Tp* pp = reinterpret_cast<Tp*>(page_allocator_.Allocate());
  24. freemem_.push_back(pp);
  25. for (std::uint64_t i = 0; i < pages - 1; i++) {
  26. pp++;
  27. freemem_.push_back(pp);
  28. }
  29. }
  30.  
  31. p = freemem_[freemem_.size() - 1];
  32. freemem_.pop_back();
  33. return p;
  34. }
  35.  
  36. void Deallocate(Tp* p) {
  37. freemem_.push_back(p);
  38. }
  39.  
  40. const PageAllocator& InnerAllocator() const noexcept {
  41. return page_allocator_;
  42. }
  43. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement