Allocative
Crate implements lightweight memory profiler which allows object traversal and size introspection.
An object implementing [Allocative
] trait is introspectable, and this crate
provides two utilities to work with such objects:
- [
FlameGraphBuilder
] to build a flame graph of object tree - [
size_of_unique_allocated_data
] provides estimation of how much allocated memory the value holds
Allocative overhead
When allocative is used, binary size is slightly increased due to implementations
of [Allocative
] trait, but it has no runtime/memory overhead when it is not used.
How it is different from other call-stack malloc profilers like jemalloc heap profiler
Allocative is not a substitute for call stack malloc profiler, it provides a different view on memory usage.
Here are some differences between allocative and call-stack malloc profiler:
- Allocative requires implementation of [
Allocative
] trait for each type which needs to be measured, and some setup in the program to enable it - Allocative flamegraph shows object by object tree, not by call stack
- Allocative shows gaps in allocated memory, e.g. spare capacity of collections or too large padding in structs or enums
- Allocative allows profiling non-malloc allocations (for example, allocations within bumpalo)
- Allocative allows profiling of memory for subset of the process data (for example, measure the size of RPC response before serialization)