pub struct LayoutBulkAlloc<B = System>where
B: GlobalAlloc,{ /* private fields */ }Expand description
LayoutBulkAlloc is an implementation of GlobalAlloc.
This struct owns a cache for a specified layout.
Method alloc and dealloc check whether the required Layout fits the
cache or not.
If the Layout does not fit the cache, the methods delegate the request to the backend;
otherwise, dealloc stores the passed pointer into the cache,
and alloc dispatches and returns a pointer from the cache.
See alloc and dealloc for the details.
Instance drop releases all the cached memory. All the pointers allocated via the instance will be invalid after then. Accessing such a pointer may lead to memory unsafety even if the pointer itself is not deallocated.
§Safety
The allocated pointers via LayoutBulkAlloc will be invalid after the instance is
dropped. Accessing such a pointer may lead to memory unsafety even if the pointer itself is
not deallocated.
Implementations§
Source§impl<B> LayoutBulkAlloc<B>where
B: GlobalAlloc,
impl<B> LayoutBulkAlloc<B>where
B: GlobalAlloc,
Trait Implementations§
Source§impl<B> GlobalAlloc for LayoutBulkAlloc<B>where
B: GlobalAlloc,
impl<B> GlobalAlloc for LayoutBulkAlloc<B>where
B: GlobalAlloc,
Source§unsafe fn alloc(&self, layout: Layout) -> *mut u8
unsafe fn alloc(&self, layout: Layout) -> *mut u8
alloc rounds up the size of layout to a multiple of the alignment of that.
If the rounded-up layout does not fits the cache, delegates the request to the backend;
Otherwise, allocates and caches a memory chunk via the backend if the cache is empty,
and dispatches a pointer from the cache.
§Safety
Instance drop releases all the memory, and all the pointers allocated via the instance will be invalid after then. Accessing such a pointer may lead to memory unsafety even if the pointer itself is not deallocated.
Source§unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout)
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout)
dealloc rounds up the size of layout to a multiple of the alignment of that.
If the rounded-up layout does not fits the cache, delegates the request to the backend;
otherwise, dealloc stores the passed pointer into the cache.
i.e. this method does not release the memory immediately.
It is when the object is dropped to free the memory.