Expand description
Memory allocation APIs.
In a given program, the standard library has one “global” memory allocator
that is used for example by Box<T> and Vec<T>.
Currently the default global allocator is unspecified. Libraries, however,
like cdylibs and staticlibs are guaranteed to use the System by
default.
§The #[global_allocator] attribute
This attribute allows configuring the choice of global allocator. You can use this to implement a completely custom global allocator to route all1 default allocation requests to a custom object.
use std::alloc::{GlobalAlloc, System, Layout};
struct MyAllocator;
unsafe impl GlobalAlloc for MyAllocator {
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
unsafe { System.alloc(layout) }
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
unsafe { System.dealloc(ptr, layout) }
}
}
#[global_allocator]
static GLOBAL: MyAllocator = MyAllocator;
fn main() {
// This `Vec` will allocate memory through `GLOBAL` above
let mut v = Vec::new();
v.push(1);
}The attribute is used on a static item whose type implements the
GlobalAlloc trait. This type can be provided by an external library:
The #[global_allocator] can only be used once in a crate
or its recursive dependencies.
The global allocator is invoked via the functions in this module
(alloc, alloc_zeroed, dealloc, realloc). Note, however,
that invoking those functions is not equivalent to directly invoking the underlying methods on
the declared global allocator! See the documentation of those functions for details.
Note that the Rust standard library internals may still directly call
Systemwhen necessary (for example for the runtime support typically required to implement a global allocator, see re-entrance onGlobalAllocfor more details). ↩
Structs§
- Layout
- Layout of a block of memory.
- Layout
Error - The
LayoutErroris returned when the parameters given toLayout::from_size_alignor some otherLayoutconstructor do not satisfy its documented constraints. - System
- The default memory allocator provided by the operating system.
- Alloc
Error Experimental - The
AllocErrorerror indicates an allocation failure that may be due to resource exhaustion or to something wrong when combining the given input arguments with this allocator. - Global
Experimental - The global memory allocator.
Traits§
- Global
Alloc - A memory allocator that can be registered as the standard library’s default
through the
#[global_allocator]attribute. - Allocator
Experimental - An implementation of
Allocatorcan allocate, grow, shrink, and deallocate arbitrary blocks of data described viaLayout. - Global
Allocator Experimental - An
Allocatorthat can be registered as the standard library’s default through the#[global_allocator]attribute.
Functions§
- alloc⚠
- Allocates memory with the global allocator.
- alloc_
zeroed ⚠ - Allocates zero-initialized memory with the global allocator.
- dealloc⚠
- Deallocates memory with the global allocator.
- handle_
alloc_ error - Signals a memory allocation error.
- realloc⚠
- Reallocates memory with the global allocator.
- set_
alloc_ error_ hook Experimental - Registers a custom allocation error hook, replacing any that was previously registered.
- take_
alloc_ error_ hook Experimental - Unregisters the current allocation error hook, returning it.
Type Aliases§
- Layout
Err Deprecated