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);
println!("{}", a);
}
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, ATOMIC_USIZE_INIT, Ordering::SeqCst};
struct Counter;
static ALLOCATED: AtomicUsize = ATOMIC_USIZE_INIT;
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));
}
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
.
Performs copy-assignment from source
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Returns a pointer meeting the size and alignment guarantees of layout
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Behaves like alloc
, but also ensures that the contents are set to zero before being returned. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Deallocate the memory referenced by ptr
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Returns a pointer suitable for holding data described by a new layout with layout
’s alignment and a size given by new_size
. To accomplish this, this may extend or shrink the allocation referenced by ptr
to fit the new layout. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Returns bounds on the guaranteed usable size of a successful allocation created with the specified layout
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
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
🔬 This is a nightly-only experimental API. (allocator_api
)
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
🔬 This is a nightly-only experimental API. (allocator_api
)
Attempts to extend the allocation referenced by ptr
to fit new_size
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Attempts to shrink the allocation referenced by ptr
to fit new_size
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Allocates a block suitable for holding an instance of T
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Deallocates a block suitable for holding an instance of T
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
Allocates a block suitable for holding n
instances of T
. Read more
🔬 This is a nightly-only experimental API. (allocator_api
)
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
🔬 This is a nightly-only experimental API. (allocator_api
)
Deallocates a block suitable for holding n
instances of T
. Read more
Formats the value using the given formatter. Read more
Allocate memory as described by the given layout
. Read more
Behaves like alloc
, but also ensures that the contents are set to zero before being returned. Read more
Deallocate the block of memory at the given ptr
pointer with the given layout
. Read more
Shrink or grow a block of memory to the given new_size
. The block is described by the given ptr
pointer and layout
. Read more
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
type Error = <U as TryFrom<T>>::Error
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static