allocative 0.3.3

Inspect rust object tree and output it as flamegraph
Documentation

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)