Struct malloc_size_of::MallocSizeOfOps
source · pub struct MallocSizeOfOps {
pub(crate) size_of_op: unsafe extern "C" fn(ptr: *const c_void) -> usize,
pub(crate) enclosing_size_of_op: Option<unsafe extern "C" fn(ptr: *const c_void) -> usize>,
pub(crate) have_seen_ptr_op: Option<Box<dyn FnMut(*const c_void) -> bool>>,
}
Expand description
Operations used when measuring heap usage of data structures.
Fields§
§size_of_op: unsafe extern "C" fn(ptr: *const c_void) -> usize
A function that returns the size of a heap allocation.
enclosing_size_of_op: Option<unsafe extern "C" fn(ptr: *const c_void) -> usize>
Like size_of_op
, but can take an interior pointer. Optional because
not all allocators support this operation. If it’s not provided, some
memory measurements will actually be computed estimates rather than
real and accurate measurements.
have_seen_ptr_op: Option<Box<dyn FnMut(*const c_void) -> bool>>
Check if a pointer has been seen before, and remember it for next time.
Useful when measuring Rc
s and Arc
s. Optional, because many places
don’t need it.
Implementations§
source§impl MallocSizeOfOps
impl MallocSizeOfOps
pub fn new( size_of: unsafe extern "C" fn(ptr: *const c_void) -> usize, malloc_enclosing_size_of: Option<unsafe extern "C" fn(ptr: *const c_void) -> usize>, have_seen_ptr: Option<Box<dyn FnMut(*const c_void) -> bool>>, ) -> Self
sourcepub(crate) fn is_empty<T: ?Sized>(ptr: *const T) -> bool
pub(crate) fn is_empty<T: ?Sized>(ptr: *const T) -> bool
Check if an allocation is empty. This relies on knowledge of how Rust handles empty allocations, which may change in the future.
sourcepub unsafe fn malloc_size_of<T: ?Sized>(&self, ptr: *const T) -> usize
pub unsafe fn malloc_size_of<T: ?Sized>(&self, ptr: *const T) -> usize
Call size_of_op
on ptr
, first checking that the allocation isn’t
empty, because some types (such as Vec
) utilize empty allocations.
sourcepub fn has_malloc_enclosing_size_of(&self) -> bool
pub fn has_malloc_enclosing_size_of(&self) -> bool
Is an enclosing_size_of_op
available?
sourcepub unsafe fn malloc_enclosing_size_of<T>(&self, ptr: *const T) -> usize
pub unsafe fn malloc_enclosing_size_of<T>(&self, ptr: *const T) -> usize
Call enclosing_size_of_op
, which must be available, on ptr
, which
must not be empty.
sourcepub fn have_seen_ptr<T>(&mut self, ptr: *const T) -> bool
pub fn have_seen_ptr<T>(&mut self, ptr: *const T) -> bool
Call have_seen_ptr_op
on ptr
.