Struct std::alloc::System 1.28.0[−][src]
pub struct System;
Expand description
操作系统提供的默认内存分配器。
它基于 Unix 平台上的 malloc
和 Windows 上的 HeapAlloc
,以及相关的函数。
此类型默认情况下实现 GlobalAlloc
trait 和 Rust 程序,就像它们具有以下定义一样:
use std::alloc::System;
#[global_allocator]
static A: System = System;
fn main() {
let a = Box::new(4); // 从系统分配器分配。
println!("{}", a);
}
Run如果愿意,还可以围绕 System
定义自己的包装器,例如跟踪分配的所有字节数:
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它也可以直接用于独立于 Rust 程序选择的分配器来分配内存。
例如,如果 Rust 程序选择使用 jemalloc 作为分配器,则 System
仍将使用 malloc
和 HeapAlloc
分配内存。