Module std::alloc1.28.0[][src]

Expand description

内存分配 API。

在给定程序中,标准库具有一个 global 内存分配器,例如 Box<T>Vec<T> 就会使用它。

当前未指定默认的分配器。 但是,默认情况下,保证像 cdylib 和 staticlib 这样的库都使用 System

#[global_allocator] 属性

此属性允许配置分配器的选择。 您可以使用它来实现一个完全自定义的 alloc 分配器,以将所有默认分配请求路由到自定义 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() {
    // 该 `Vec` 将通过上面的 `GLOBAL` 分配内存
    let mut v = Vec::new();
    v.push(1);
}
Run

该属性用于其类型实现 GlobalAlloc trait 的 static 项。 可以由外部库提供此类型:

extern crate jemallocator;

use jemallocator::Jemalloc;

#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;

fn main() {}
Run

#[global_allocator] 只能在 crate 或其递归依赖性中使用一次。

Structs

AllocErrorExperimental

AllocError 错误表示分配失败,这可能是由于资源耗尽或将给定输入参数与此分配器组合在一起时出错所致。

GlobalExperimental

内存分配器。

Layout

一块内存的布局。

LayoutError

Layout::from_size_align 或其他 Layout 构造函数的参数不满足其记录的约束。

System

操作系统提供的默认内存分配器。

Traits

AllocatorExperimental

Allocator 的实现可以分配,增长,收缩和释放通过 Layout 描述的任意数据块。

GlobalAlloc

可以通过 #[global_allocator] 属性将其分配为标准库的默认内存分配器。

Functions

set_alloc_error_hookExperimental

注册一个自定义分配错误 hook,替换以前注册的任何错误。

take_alloc_error_hookExperimental

注销当前分配错误 hook,将其返回。

alloc

用分配器分配内存。

alloc_zeroed

用分配器分配零初始化的内存。

dealloc

使用分配器释放内存。

handle_alloc_error

由于内存分配错误或失败而终止。

realloc

使用分配器重新分配内存。

Type Definitions

LayoutErrDeprecated