1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
//! Arena operations. use std::io; use std::os::raw::{c_char, c_uint}; use {get, get_mib, name_to_mib}; const NARENAS: *const c_char = b"arenas.narenas\0" as *const _ as *const _; /// Returns the current limit on the number of arenas. /// /// # Examples /// /// ``` /// extern crate jemallocator; /// extern crate jemalloc_ctl; /// /// #[global_allocator] /// static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; /// /// fn main() { /// println!("number of arenas: {}", jemalloc_ctl::arenas::narenas().unwrap()); /// } /// ``` pub fn narenas() -> io::Result<c_uint> { unsafe { get(NARENAS) } } /// A type providing access to the current limit on the number of arenas. /// /// # Examples /// /// ``` /// extern crate jemallocator; /// extern crate jemalloc_ctl; /// /// use jemalloc_ctl::arenas::NArenas; /// /// #[global_allocator] /// static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; /// /// fn main() { /// let narenas = NArenas::new().unwrap(); /// /// println!("number of arenas: {}", narenas.get().unwrap()); /// } /// ``` #[derive(Copy, Clone)] pub struct NArenas([usize; 2]); impl NArenas { /// Returns a new `NArenas`. pub fn new() -> io::Result<NArenas> { unsafe { let mut mib = [0; 2]; name_to_mib(NARENAS, &mut mib)?; Ok(NArenas(mib)) } } /// Returns the maximum number of arenas. pub fn get(&self) -> io::Result<c_uint> { unsafe { get_mib(&self.0) } } }