Crate malloc_size_of [−] [src]
A crate for measuring the heap usage of data structures in a way that
integrates with Firefox's memory reporting, particularly the use of
mozjemalloc and DMD. In particular, it has the following features.
- It isn't bound to a particular heap allocator.
- It provides traits for both "shallow" and "deep" measurement, which gives
flexibility in the cases where the traits can't be used.
- It allows for measuring blocks even when only an interior pointer can be
obtained for heap allocations, e.g. HashSet and HashMap. (This relies
on the heap allocator having suitable support, which mozjemalloc has.)
- It allows handling of types like Rc and Arc by providing traits that
are different to the ones for non-graph structures.
Suggested uses are as follows.
- When possible, use the MallocSizeOf trait. (Deriving support is
provided by the malloc_size_of_derive crate.)
- If you need an additional synchronization argument, provide a function
that is like the standard trait method, but with the extra argument.
- If you need multiple measurements for a type, provide a function named
add_size_of that takes a mutable reference to a struct that contains
the multiple measurement fields.
- When deep measurement (via MallocSizeOf) cannot be implemented for a
type, shallow measurement (via MallocShallowSizeOf) in combination with
iteration can be a useful substitute.
- Rc and Arc are always tricky, which is why MallocSizeOf is not (and
should not be) implemented for them.
- If an Rc or Arc is known to be a "primary" reference and can always
be measured, it should be measured via the MallocUnconditionalSizeOf
trait.
- If an Rc or Arc should be measured only if it hasn't been seen
before, it should be measured via the MallocConditionalSizeOf trait.
- Using universal function call syntax is a good idea when measuring boxed
fields in structs, because it makes it clear that the Box is being
measured as well as the thing it points to. E.g.
<Box<_> as MallocSizeOf>::size_of(field, ops).
Macros
| malloc_size_of_is_0 |
For use on types where size_of() returns 0. |
Structs
| MallocSizeOfOps |
Operations used when measuring heap usage of data structures. |
Traits
| MallocConditionalShallowSizeOf |
|
| MallocConditionalSizeOf |
Like |
| MallocShallowSizeOf |
Trait for measuring the "shallow" heap usage of a container. |
| MallocSizeOf |
Trait for measuring the "deep" heap usage of a data structure. This is the most commonly-used of the traits. |
| MallocUnconditionalShallowSizeOf |
|
| MallocUnconditionalSizeOf |
Like |