4#include "../Foundation/Assert.h"
5#include "../Foundation/PrimitiveTypes.h"
6#include "../Memory/Memory.h"
9struct SC_COMPILER_EXPORT VirtualMemory;
10struct SC_COMPILER_EXPORT VirtualAllocator;
42 [[nodiscard]]
bool reserve(
size_t maxCapacityInBytes);
50 [[nodiscard]]
bool commit(
size_t sizeInBytes);
53 [[nodiscard]]
bool shrink(
size_t sizeInBytes);
56 [[nodiscard]]
size_t size()
const {
return committedBytes; }
59 [[nodiscard]]
size_t capacity()
const {
return reservedBytes; }
62 [[nodiscard]]
void*
data() {
return memory; }
65 [[nodiscard]]
const void*
data()
const {
return memory; }
68 size_t reservedBytes = 0;
69 size_t committedBytes = 0;
71 void* memory =
nullptr;
82 virtual void*
allocateImpl(
const void* owner,
size_t numBytes,
size_t alignment)
override;
85 void syncFixedAllocator();
A MemoryAllocator implementation using a finite slice of memory.
Definition Memory.h:108
A MemoryAllocator implementation based on a growable slice of VirtualMemory.
Definition VirtualMemory.h:76
virtual void * allocateImpl(const void *owner, size_t numBytes, size_t alignment) override
Allocate virtual function to be reimplemented.
virtual void * reallocateImpl(void *memory, size_t numBytes) override
Re-allocate virtual function to be reimplemented.
Reserves a contiguous slice of virtual memory committing just a portion of it.
Definition VirtualMemory.h:25
size_t size() const
Returns how many bytes are currently committed / accessible.
Definition VirtualMemory.h:56
static size_t roundUpToPageSize(size_t size)
Round up the passed in size to system memory page size.
void * data()
Returns a pointer to the start of the reserved virtual memory.
Definition VirtualMemory.h:62
size_t capacity() const
Returns how many bytes are currently reserved.
Definition VirtualMemory.h:59
const void * data() const
Returns a pointer to the start of the reserved virtual memory.
Definition VirtualMemory.h:65
bool reserve(size_t maxCapacityInBytes)
Reserves a large block of virtual memory of size maxCapacityInBytes.
bool shrink(size_t sizeInBytes)
Reclaims all unused pages past sizeInBytes (previously committed with VirtualMemory::commit)
bool commit(size_t sizeInBytes)
Ensures at least sizeInBytes to be committed / accessible from the large maxCapacityInBytes block.
void release()
Reclaims the entire virtual memory block (reserved with VirtualMemory::reserve)
static size_t getPageSize()
Obtains system memory page size.