From 01dc06934fa66465fff2b89e7ea249610b35189b Mon Sep 17 00:00:00 2001 From: j2-tulloch <james2.tulloch@live.uwe.ac.uk> Date: Wed, 20 Dec 2023 21:00:22 +0000 Subject: [PATCH] Upload New File --- Worksheet2/bumpalld.hpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Worksheet2/bumpalld.hpp diff --git a/Worksheet2/bumpalld.hpp b/Worksheet2/bumpalld.hpp new file mode 100644 index 0000000..220f980 --- /dev/null +++ b/Worksheet2/bumpalld.hpp @@ -0,0 +1,40 @@ +#include <iostream> +#include <cstddef> + +class BumpAllocator { + char* start; // Pointer to the start of the allocated memory block + char* current; // Pointer to the current position in the memory block (end side) + size_t size; // Total size of the memory block + +public: + // Constructor for the BumpAllocator + BumpAllocator(size_t size) : size(size) { + start = new char[size]; // Allocate a memory block of the given size + current = start + size; // Initialize the current pointer to the end of the block + } + + // Function to allocate memory within the block, moving downwards + void* allocate(size_t allocSize) { + // Check if there is enough space left in the block for the requested size + if (current - allocSize < start) { + //std::cout << "Not enough space in the block for allocation!" << std::endl; + return nullptr; // Return nullptr if there is not enough space + } + current -= allocSize; // "Bump" the current pointer backward by the requested size + //std::cout << "Memory allocated successfully!" << std::endl; + return current; // Return the new current position (start of allocated block) + } + + // Function to reset the allocator + void reset() { + current = start + size; // Reset the current pointer back to the end of the block + //std::cout << "Allocator reset!" << std::endl; + } + + // Destructor for the BumpAllocator + ~BumpAllocator() { + delete[] start; // Deallocate the memory block when the allocator is destroyed + //std::cout << "Memory block deallocated!" << std::endl; + } +}; + -- GitLab