Skip to main content

TurboMalloc

Struct TurboMalloc 

Source
pub struct TurboMalloc;
Expand description

Turbo’s preferred global allocator. This is a new type instead of a type alias because you can’t use type aliases to instantiate unit types (E0423).

Implementations§

Source§

impl TurboMalloc

Source

pub fn memory_usage() -> usize

Returns the bytes mimalloc currently has committed from the OS. This measures what the allocator holds rather than the process’s total footprint, and it does not track frees in lock step, since mimalloc reuses and purges pages on its own schedule.

See current_commit in mi_process_info, which documents each figure mimalloc reports.

Without the custom_allocator feature this is a process-wide live-bytes counter instead, which is approximate because threads buffer their updates.

Source

pub fn thread_stop()

Clears the calling thread’s allocation counters. Call this when a thread is about to stop, so a thread that reuses its slot does not inherit the previous totals.

Source

pub fn thread_park()

Source

pub fn collect(force: bool)

When using mimalloc triggers some cleanup force=false: process threadlocal free lists and other threadlocal deferred work only operates on thread local data and should be fast force=true: do all the work of process=false and then process global shared structures and return memory to the OS if possible, this is much slower and should only be done rarely.

Source

pub fn allocation_counters() -> AllocationCounters

Source

pub fn reset_allocation_counters(start: AllocationCounters)

Source

pub fn memory_pressure() -> Option<u8>

Returns a memory pressure value in the range 0..=100, or None when the current platform does not expose a memory pressure signal or a query for it failed.

0 means no memory pressure, 100 means maximum pressure.

  • On Linux this is derived from /proc/pressure/memory (the some avg10 stall percentage), falling back to (MemTotal - MemAvailable) / MemTotal from /proc/meminfo when PSI is not available (older kernels, no CONFIG_PSI, or containers without access).
  • On macOS this is derived from the kern.memorystatus_level sysctl (100 - free_memory_percentage).
  • On Windows this is MEMORYSTATUSEX::dwMemoryLoad (percentage of physical memory in use).
  • On other platforms this returns None.

Trait Implementations§

Source§

impl GlobalAlloc for TurboMalloc

Source§

unsafe fn alloc(&self, layout: Layout) -> *mut u8

Allocates memory as described by the given layout. Read more
Source§

unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout)

Deallocates the block of memory at the given ptr pointer with the given layout. Read more
Source§

unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8

Behaves like alloc, but also ensures that the contents are set to zero before being returned. Read more
Source§

unsafe fn realloc( &self, ptr: *mut u8, layout: Layout, new_size: usize, ) -> *mut u8

Shrinks or grows a block of memory to the given new_size in bytes. The block is described by the given ptr pointer and layout. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.