1.28.0[−][src]Struct std::alloc::System
The default memory allocator provided by the operating system.
This is based on malloc
on Unix platforms and HeapAlloc
on Windows,
plus related functions.
This type implements the GlobalAlloc
trait and Rust programs by default
work as if they had this definition:
use std::alloc::System; #[global_allocator] static A: System = System; fn main() { let a = Box::new(4); // Allocates from the system allocator. println!("{}", a); }Run
You can also define your own wrapper around System
if you'd like, such as
keeping track of the number of all bytes allocated:
use std::alloc::{System, GlobalAlloc, Layout}; use std::sync::atomic::{AtomicUsize, Ordering::SeqCst}; struct Counter; static ALLOCATED: AtomicUsize = AtomicUsize::new(0); unsafe impl GlobalAlloc for Counter { unsafe fn alloc(&self, layout: Layout) -> *mut u8 { let ret = System.alloc(layout); if !ret.is_null() { ALLOCATED.fetch_add(layout.size(), SeqCst); } return ret } unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { System.dealloc(ptr, layout); ALLOCATED.fetch_sub(layout.size(), SeqCst); } } #[global_allocator] static A: Counter = Counter; fn main() { println!("allocated bytes before main: {}", ALLOCATED.load(SeqCst)); }Run
It can also be used directly to allocate memory independently of whatever
global allocator has been selected for a Rust program. For example if a Rust
program opts in to using jemalloc as the global allocator, System
will
still allocate memory using malloc
and HeapAlloc
.
Trait Implementations
impl Copy for System
[src]
impl Debug for System
[src]
impl Clone for System
[src]
fn clone(&self) -> System
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl Default for System
[src]
impl GlobalAlloc for System
[src]
unsafe fn alloc(&self, layout: Layout) -> *mut u8
[src]
unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8
[src]
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout)
[src]
unsafe fn realloc(
&self,
ptr: *mut u8,
layout: Layout,
new_size: usize
) -> *mut u8
[src]
&self,
ptr: *mut u8,
layout: Layout,
new_size: usize
) -> *mut u8
impl Alloc for System
[src]
unsafe fn alloc(&mut self, layout: Layout) -> Result<NonNull<u8>, AllocErr>
[src]
unsafe fn alloc_zeroed(
&mut self,
layout: Layout
) -> Result<NonNull<u8>, AllocErr>
[src]
&mut self,
layout: Layout
) -> Result<NonNull<u8>, AllocErr>
unsafe fn dealloc(&mut self, ptr: NonNull<u8>, layout: Layout)
[src]
unsafe fn realloc(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<NonNull<u8>, AllocErr>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<NonNull<u8>, AllocErr>
fn usable_size(&self, layout: &Layout) -> (usize, usize)
[src]
Returns bounds on the guaranteed usable size of a successful allocation created with the specified layout
. Read more
unsafe fn alloc_excess(&mut self, layout: Layout) -> Result<Excess, AllocErr>
[src]
Behaves like alloc
, but also returns the whole size of the returned block. For some layout
inputs, like arrays, this may include extra storage usable for additional data. Read more
unsafe fn realloc_excess(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<Excess, AllocErr>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<Excess, AllocErr>
Behaves like realloc
, but also returns the whole size of the returned block. For some layout
inputs, like arrays, this may include extra storage usable for additional data. Read more
unsafe fn grow_in_place(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
Attempts to extend the allocation referenced by ptr
to fit new_size
. Read more
unsafe fn shrink_in_place(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
Attempts to shrink the allocation referenced by ptr
to fit new_size
. Read more
fn alloc_one<T>(&mut self) -> Result<NonNull<T>, AllocErr>
[src]
Allocates a block suitable for holding an instance of T
. Read more
unsafe fn dealloc_one<T>(&mut self, ptr: NonNull<T>)
[src]
Deallocates a block suitable for holding an instance of T
. Read more
fn alloc_array<T>(&mut self, n: usize) -> Result<NonNull<T>, AllocErr>
[src]
Allocates a block suitable for holding n
instances of T
. Read more
unsafe fn realloc_array<T>(
&mut self,
ptr: NonNull<T>,
n_old: usize,
n_new: usize
) -> Result<NonNull<T>, AllocErr>
[src]
&mut self,
ptr: NonNull<T>,
n_old: usize,
n_new: usize
) -> Result<NonNull<T>, AllocErr>
Reallocates a block previously suitable for holding n_old
instances of T
, returning a block suitable for holding n_new
instances of T
. Read more
unsafe fn dealloc_array<T>(
&mut self,
ptr: NonNull<T>,
n: usize
) -> Result<(), AllocErr>
[src]
&mut self,
ptr: NonNull<T>,
n: usize
) -> Result<(), AllocErr>
Deallocates a block suitable for holding n
instances of T
. Read more
Auto Trait Implementations
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
ⓘImportant traits for &'_ mut Ffn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,