Crate allocative

source ·
Expand description

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:

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)

Structs

  • Node in flamegraph tree.
  • Build a flamegraph from given root objects.
  • Hashed string, which is a key while descending into a tree (e.g. type name or field name).

Traits

  • This trait allows traversal of object graph.

Functions

Attribute Macros

Derive Macros