Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
VirtualMemory.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Common/PrimitiveDefinitions.h"
5#include "../Memory/Memory.h"
6namespace SC
7{
8struct SC_MEMORY_EXPORT VirtualMemory;
9struct SC_MEMORY_EXPORT VirtualAllocator;
10} // namespace SC
13
24{
25 VirtualMemory() = default;
26 VirtualMemory(const VirtualMemory&) = delete;
27 VirtualMemory(VirtualMemory&&) = delete;
28 VirtualMemory& operator=(const VirtualMemory&) = delete;
29 VirtualMemory& operator=(VirtualMemory&&) = delete;
30 ~VirtualMemory() { release(); }
31
33 [[nodiscard]] static size_t roundUpToPageSize(size_t size);
34
36 [[nodiscard]] static size_t getPageSize();
37
41 [[nodiscard]] bool reserve(size_t maxCapacityInBytes);
42
44 void release();
45
49 [[nodiscard]] bool commit(size_t sizeInBytes);
50
52 [[nodiscard]] bool decommit(size_t sizeInBytes);
53
55 [[nodiscard]] size_t size() const { return committedBytes; }
56
58 [[nodiscard]] size_t capacity() const { return reservedBytes; }
59
61 [[nodiscard]] void* data() { return memory; }
62
64 [[nodiscard]] const void* data() const { return memory; }
65
66 private:
67 size_t reservedBytes = 0;
68 size_t committedBytes = 0;
69
70 void* memory = nullptr;
71};
72
75{
76 VirtualAllocator(VirtualMemory& virtualMemory);
77
78 protected:
79 VirtualMemory& virtualMemory;
80
81 virtual void* allocateImpl(const void* owner, size_t numBytes, size_t alignment) override;
82 virtual void* reallocateImpl(void* memory, size_t numBytes) override;
83
84 void syncFixedAllocator();
85};
86
A MemoryAllocator implementation using a finite slice of memory.
Definition Memory.h:146
A MemoryAllocator implementation based on a growable slice of VirtualMemory.
Definition VirtualMemory.h:75
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:24
size_t size() const
Returns how many bytes are currently committed / accessible.
Definition VirtualMemory.h:55
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:61
size_t capacity() const
Returns how many bytes are currently reserved.
Definition VirtualMemory.h:58
const void * data() const
Returns a pointer to the start of the reserved virtual memory.
Definition VirtualMemory.h:64
bool reserve(size_t maxCapacityInBytes)
Reserves a large block of virtual memory of size maxCapacityInBytes.
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)
bool decommit(size_t sizeInBytes)
Reclaims all unused pages past sizeInBytes (previously committed with VirtualMemory::commit)
static size_t getPageSize()
Obtains system memory page size.