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
分配内存。