Struct VirtualArena
- Namespace
- Misaki.HighPerformance.LowLevel.Buffer
- Assembly
- Misaki.HighPerformance.LowLevel.dll
A thread-safe memory management structure that reserves a large virtual address space and commits physical memory on demand as allocations are made.
public struct VirtualArena : IMemoryAllocator<VirtualArena, VirtualArena.CreationOptions>, IDisposable
- Implements
- Inherited Members
Constructors
VirtualArena(nuint)
public VirtualArena(nuint reserveCapacity)
Parameters
reserveCapacitynuint
Properties
Allocated
public readonly nuint Allocated { get; }
Property Value
Buffer
public readonly byte* Buffer { get; }
Property Value
- byte*
Committed
public readonly nuint Committed { get; }
Property Value
Reserved
public readonly nuint Reserved { get; }
Property Value
Methods
Allocate(nuint, nuint, AllocationOption)
Allocates a block of memory of the specified size and alignment, using the given allocation options.
public void* Allocate(nuint size, nuint alignment, AllocationOption allocationOption)
Parameters
sizenuintThe number of bytes to allocate. Must be greater than zero and less than or equal to the reserved capacity.
alignmentnuintThe alignment, in bytes, for the allocated memory block. Must be a power of two.
allocationOptionAllocationOptionThe allocation options that control allocation behavior.
Returns
- void*
A pointer to the allocated memory block if the allocation succeeds, otherwise null.
Remarks
This is thread safe.
Create(in CreationOptions)
Creates a new instance of the allocator with the specified options.
public static VirtualArena Create(in VirtualArena.CreationOptions opts)
Parameters
optsVirtualArena.CreationOptionsThe options for creating the allocator.
Returns
- VirtualArena
The created allocator instance.
Dispose()
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
public void Dispose()
Free(void*)
Frees a previously allocated block of memory.
public readonly void Free(void* ptr)
Parameters
ptrvoid*A pointer to the memory block to free.
Remarks
The pointer must have been returned by a previous call to the Allocate(nuint, nuint, AllocationOption) or Reallocate(void*, nuint, nuint, nuint, AllocationOption) method. After calling this method, the pointer is no longer valid and must not be used.
Reallocate(void*, nuint, nuint, nuint, AllocationOption)
Reallocates a block of memory to a new size and alignment.
public void* Reallocate(void* ptr, nuint oldSize, nuint newSize, nuint alignment, AllocationOption allocationOption)
Parameters
ptrvoid*A pointer to the memory block to reallocate.
oldSizenuintThe size of the original memory block.
newSizenuintThe size of the new memory block.
alignmentnuintThe alignment of the new memory block.
allocationOptionAllocationOptionThe allocation options.
Returns
- void*
A pointer to the reallocated memory block. null if reallocation fails.
Remarks
The returned pointer must be freed using the Free(void*) method to avoid memory leaks. If the reallocation fails, the original pointer remains valid and must be freed by the caller.
Reset()
Resets the arena.
public void Reset()