Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <stack>
- class FixedAllocator {
- public:
- FixedAllocator(size_t chunk_size, size_t page_size);
- void *Allocate();
- void Deallocate(void *value);
- private:
- size_t chunk_size;
- size_t page_size;
- std::vector<std::vector<unsigned char>> pool;
- std::stack<unsigned char*> free_memory;
- };
- FixedAllocator::FixedAllocator(size_t chunk_size, size_t page_size) {
- this->chunk_size = chunk_size;
- this->page_size = page_size;
- }
- void *FixedAllocator::Allocate() {
- if (free_memory.empty()) {
- pool.emplace_back(page_size * chunk_size);
- for (size_t i = 0; i < page_size * chunk_size; i += chunk_size)
- free_memory.push(&pool.back()[i]);
- }
- auto top_memory = free_memory.top();
- free_memory.pop();
- return top_memory;
- }
- void FixedAllocator::Deallocate(void *value) {
- auto del_memory = static_cast<unsigned char *>(value);
- free_memory.push(del_memory);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement