Skip to main content

Carved

Struct Carved 

Source
pub struct Carved;
Expand description

A size-classed free list that carves its blocks out of larger chunks, for a program that runs and ends.

The blocks a program keeps alive are carved, not asked for one at a time (task-2191). Pooled asks the system for every block its lists do not hold, and a statement that keeps what it builds, such as an .import of 50,000 rows held for one bulk build, empties every list at once and sends each value to the Windows heap: the heap was 38% of the import. This takes 64 KiB from the system for a class whose list is empty and hands out blocks from it, so a block costs a pointer bump.

Freed blocks are kept, not given back. A carved block is part of a chunk and the system cannot take it alone, so a class keeps every block it has carved, which is at most the most of that class the program held at once. That is why the command line and the shell install it and the MCP server, which runs for as long as its client does, keeps Pooled.

Trait Implementations§

Source§

impl GlobalAlloc for Carved

Source§

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

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

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

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

unsafe fn realloc( &self, pointer: *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
1.28.0 · 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

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.