Trait GenericAlloc

Source
pub unsafe trait GenericAlloc {
Show 14 methods // Required methods unsafe fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>>; unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout); unsafe fn init<T>(&self, val: T) -> Result<NonNull<T>>; unsafe fn alloc_then<T, F>(&self, f: F) -> Result<NonNull<T>> where F: FnOnce() -> Result<T>; unsafe fn init_slice<T: Clone>( &self, len: usize, val: T, ) -> Result<NonNull<[T]>>; unsafe fn alloc_slice_then<T, F>( &self, len: usize, f: F, ) -> Result<NonNull<[T]>> where F: FnMut(usize) -> Result<T>; unsafe fn zeroed<T>(&self) -> Result<NonNull<MaybeUninit<T>>>; unsafe fn zeroed_slice<T>( &self, len: usize, ) -> Result<NonNull<[MaybeUninit<T>]>>; unsafe fn uninit<T>(&self) -> Result<NonNull<MaybeUninit<T>>>; unsafe fn uninit_slice<T>( &self, len: usize, ) -> Result<NonNull<[MaybeUninit<T>]>>; unsafe fn release<T>(&self, ptr: NonNull<T>); unsafe fn release_with<T: ?Sized>(&self, ptr: NonNull<T>, layout: Layout); unsafe fn release_slice<T>(&self, ptr: NonNull<[T]>); unsafe fn release_slice_with<T>(&self, ptr: NonNull<[T]>, layout: Layout);
}
Expand description

§Safety

提供常见的和具体类型相关的内存分配操作接口.

Required Methods§

Source

unsafe fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout)

§Safety

ptr一定时alloc_buf分配的内存地址

Source

unsafe fn init<T>(&self, val: T) -> Result<NonNull<T>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn alloc_then<T, F>(&self, f: F) -> Result<NonNull<T>>
where F: FnOnce() -> Result<T>,

§Safety

用户保证分配的内存生命周期一定小于self 通过函数初始化目的是在内存池场景下可以控制多个内嵌对象分配的内存顺序 如果T内部成员也需要从同一个内存池分配内存,那么init_then可以保证先分配T,再分配成员 而init接口一定是先分配成员,再分配T,两种分配方式在不同场景下的访问顺序可能对性能有一定影响.

Source

unsafe fn init_slice<T: Clone>( &self, len: usize, val: T, ) -> Result<NonNull<[T]>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn alloc_slice_then<T, F>( &self, len: usize, f: F, ) -> Result<NonNull<[T]>>
where F: FnMut(usize) -> Result<T>,

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn zeroed<T>(&self) -> Result<NonNull<MaybeUninit<T>>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn zeroed_slice<T>( &self, len: usize, ) -> Result<NonNull<[MaybeUninit<T>]>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn uninit<T>(&self) -> Result<NonNull<MaybeUninit<T>>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn uninit_slice<T>( &self, len: usize, ) -> Result<NonNull<[MaybeUninit<T>]>>

§Safety

用户保证分配的内存生命周期一定小于self

Source

unsafe fn release<T>(&self, ptr: NonNull<T>)

§Safety

ptr必须是allocate分配的内存, 基于类型获取的Layout和分配时保持一致

Source

unsafe fn release_with<T: ?Sized>(&self, ptr: NonNull<T>, layout: Layout)

§Safety

ptr必须是allocate分配的内存, Layout和分配时保持一致

Source

unsafe fn release_slice<T>(&self, ptr: NonNull<[T]>)

§Safety

ptr必须是allocate分配的内存, 基于类型获取的Layout和分配时保持一致

Source

unsafe fn release_slice_with<T>(&self, ptr: NonNull<[T]>, layout: Layout)

§Safety

ptr必须是allocate分配的内存, Layout和分配时保持一致

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§