pub struct UnifiedAllocator { /* private fields */ }Expand description
Unified allocator interface that can use different allocation strategies
Implementations§
Source§impl UnifiedAllocator
impl UnifiedAllocator
Sourcepub fn new(
base_ptr: NonNull<u8>,
total_size: usize,
config: UnifiedConfig,
) -> Result<Self, AllocationError>
pub fn new( base_ptr: NonNull<u8>, total_size: usize, config: UnifiedConfig, ) -> Result<Self, AllocationError>
Create a new unified allocator
Sourcepub fn allocate(
&mut self,
size: usize,
requested_allocator_type: AllocatorType,
_alignment: Option<usize>,
) -> Result<NonNull<u8>, AllocationError>
pub fn allocate( &mut self, size: usize, requested_allocator_type: AllocatorType, _alignment: Option<usize>, ) -> Result<NonNull<u8>, AllocationError>
Allocate memory using the unified interface
Sourcepub fn deallocate(
&mut self,
ptr: NonNull<u8>,
size: usize,
) -> Result<(), AllocationError>
pub fn deallocate( &mut self, ptr: NonNull<u8>, size: usize, ) -> Result<(), AllocationError>
Deallocate memory
Sourcepub fn free(
&mut self,
ptr: *mut c_void,
_allocator_type: AllocatorType,
) -> Result<(), AllocationError>
pub fn free( &mut self, ptr: *mut c_void, _allocator_type: AllocatorType, ) -> Result<(), AllocationError>
Free memory (alias for deallocate)
Sourcepub fn reallocate(
&mut self,
_ptr: *mut c_void,
new_size: usize,
allocator_type: AllocatorType,
) -> Result<*mut c_void, AllocationError>
pub fn reallocate( &mut self, _ptr: *mut c_void, new_size: usize, allocator_type: AllocatorType, ) -> Result<*mut c_void, AllocationError>
Allocate a fresh block for a reallocation request.
Deliberately does not free _ptr (its parameter is unused by
design, not by oversight): the sole caller,
crate::memory::GpuMemorySystem::reallocate, already owns the
complete, correct realloc contract one layer up – it tracks the old
allocation’s real size (which this layer does not), copies the live
data with it via copy_nonoverlapping, and only then frees the old
pointer. Freeing _ptr here as well would race that caller: it
still reads from _ptr after this call returns whenever the new
address differs (the overwhelmingly common case, since this always
allocates fresh rather than truly growing in place), which would
make that read a use-after-free and the caller’s own free a
double-free.
Sourcepub fn get_stats(&self) -> &UnifiedStats
pub fn get_stats(&self) -> &UnifiedStats
Get unified statistics
Sourcepub fn get_config(&self) -> &UnifiedConfig
pub fn get_config(&self) -> &UnifiedConfig
Get the active configuration (thresholds, enabled sub-allocators, default strategy).
allocate currently always uses the type its caller passes rather
than deriving one from buddy_threshold/slab_threshold/
arena_threshold/enable_auto_routing – centralizing that
decision here would change
GpuMemorySystem::choose_allocator’s tested
routing boundaries (its hardcoded 1 KiB / 1 MiB cutovers do not
line up with this config’s threshold values), which is a
deliberate behavior decision left to that caller rather than one
this lint pass makes unilaterally. Exposed so callers can inspect
(and eventually route against) the real configuration instead of
duplicating their own hardcoded thresholds.
Sourcepub fn get_detailed_info(&self) -> DetailedAllocatorInfo
pub fn get_detailed_info(&self) -> DetailedAllocatorInfo
Get detailed allocator information
Sourcepub fn reset_allocator(
&mut self,
allocator_type: AllocatorType,
) -> Result<(), AllocationError>
pub fn reset_allocator( &mut self, allocator_type: AllocatorType, ) -> Result<(), AllocationError>
Reset specific allocator
Sourcepub fn garbage_collect(&mut self) -> GarbageCollectionResult
pub fn garbage_collect(&mut self) -> GarbageCollectionResult
Force garbage collection on applicable allocators
Sourcepub fn optimize_strategies(&mut self) -> Result<(), AllocationError>
pub fn optimize_strategies(&mut self) -> Result<(), AllocationError>
Optimize allocation strategies based on performance data
Trait Implementations§
impl Send for UnifiedAllocator
impl Sync for UnifiedAllocator
Auto Trait Implementations§
impl Freeze for UnifiedAllocator
impl RefUnwindSafe for UnifiedAllocator
impl Unpin for UnifiedAllocator
impl UnsafeUnpin for UnifiedAllocator
impl UnwindSafe for UnifiedAllocator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more