On this page
Module std::alloc
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 cdylib
s and staticlib
s 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 all 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 {
System.alloc(layout)
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
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:
use jemallocator::Jemalloc;
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;
fn main() {}
The #[global_allocator]
can only be used once in a crate or its recursive dependencies.
Structs
-
AllocErrorExperimentalThe
AllocError
error indicates an allocation failure that may be due to resource exhaustion or to something wrong when combining the given input arguments with this allocator. -
GlobalExperimentalThe global memory allocator.
-
Layout of a block of memory.
-
The parameters given to
Layout::from_size_align
or some otherLayout
constructor do not satisfy its documented constraints. -
The default memory allocator provided by the operating system.
Traits
-
AllocatorExperimentalAn implementation of
Allocator
can allocate, grow, shrink, and deallocate arbitrary blocks of data described viaLayout
. -
A memory allocator that can be registered as the standard library’s default through the
#[global_allocator]
attribute.
Functions
-
set_alloc_error_hookExperimentalRegisters a custom allocation error hook, replacing any that was previously registered.
-
take_alloc_error_hookExperimentalUnregisters the current allocation error hook, returning it.
-
Allocate memory with the global allocator.
-
Allocate zero-initialized memory with the global allocator.
-
Deallocate memory with the global allocator.
-
Signal a memory allocation error.
-
Reallocate memory with the global allocator.
Type Aliases
-
LayoutErrDeprecated
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/alloc/index.html