當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。