当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust System用法及代码示例


本文简要介绍rust语言中 Struct std::alloc::System 的用法。

用法

pub struct System;

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

这是基于 Unix 平台上的 malloc 和 Windows 上的 HeapAlloc 以及相关函数。

这种类型实现了GlobalAlloc trait,Rust 程序默认工作就像他们有这个定义一样:

use std::alloc::System;

#[global_allocator]
static A: System = System;

fn main() {
    let a = Box::new(4); // Allocates from the system allocator.
    println!("{}", a);
}

如果您愿意,您还可以在 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));
}

它也可以直接用于独立于为 Rust 程序选择的任何全局分配器分配内存。例如,如果 Rust 程序选择使用 jemalloc 作为全局分配器,System 仍将使用 mallocHeapAlloc 分配内存。

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::alloc::System。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。