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 "../Foundation/Assert.h"
5#include "../Foundation/PrimitiveTypes.h"
6#include "../Memory/Memory.h" // FixedAllocator
7namespace SC
8{
9struct SC_COMPILER_EXPORT VirtualMemory;
10struct SC_COMPILER_EXPORT VirtualAllocator;
11} // namespace SC
14
25{
26 VirtualMemory() = default;
27 VirtualMemory(const VirtualMemory&) = delete;
28 VirtualMemory(VirtualMemory&&) = delete;
29 VirtualMemory& operator=(const VirtualMemory&) = delete;
30 VirtualMemory& operator=(VirtualMemory&&) = delete;
31 ~VirtualMemory() { release(); }
32
34 [[nodiscard]] static size_t roundUpToPageSize(size_t size);
35
37 [[nodiscard]] static size_t getPageSize();
38
42 [[nodiscard]] bool reserve(size_t maxCapacityInBytes);
43
45 void release();
46
50 [[nodiscard]] bool commit(size_t sizeInBytes);
51
53 [[nodiscard]] bool shrink(size_t sizeInBytes);
54
56 [[nodiscard]] size_t size() const { return committedBytes; }
57
59 [[nodiscard]] size_t capacity() const { return reservedBytes; }
60
62 [[nodiscard]] void* data() { return memory; }
63
65 [[nodiscard]] const void* data() const { return memory; }
66
67 private:
68 size_t reservedBytes = 0;
69 size_t committedBytes = 0;
70
71 void* memory = nullptr;
72};
73
76{
77 VirtualAllocator(VirtualMemory& virtualMemory);
78
79 protected:
80 VirtualMemory& virtualMemory;
81
82 virtual void* allocateImpl(const void* owner, size_t numBytes, size_t alignment) override;
83 virtual void* reallocateImpl(void* memory, size_t numBytes) override;
84
85 void syncFixedAllocator();
86};
87
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.